sqlplus / a
begin
dbms_output.put_line('hello world');
end;
/
--设置输出开关
set serveroutput on
--普通变量
declare
v_name varchar(20) := '张三'; --普通变量
v_sal number;
v_addr varchar(200);
begin
v_sal := 5000.00; --直接赋值
select '深圳' into v_addr from dual; --语句赋值
dbms_output.put_line('姓名:'||v_name);
dbms_output.put_line('薪水:'||v_sal);
dbms_output.put_line('地址:'||v_addr);
end;
create table emp(ename varchar(20),esal number);
insert into emp values('wanglei',25000);
--引用型变量
declare
v_name emp.ename%type; --引用型变量
v_sal emp.esal%type; --引用型变量
begin
select ename,esal into v_name,v_sal from emp; --语句赋值
dbms_output.put_line('姓名:'||v_name);
dbms_output.put_line('薪水:'||v_sal);
end;
--记录型变量
declare
v_emp emp%rowtype; --记录型接受一行数据,不能接受多行;接受多行需要使用集合,用cursor游标接受集合
begin
select * into v_emp from emp where rownum = 1;
dbms_output.put_line(v_emp.ename||','||v_emp.esal);
end;
--流程控制
--条件分支
declare
v_count number;
begin
select count(1) into v_count from emp;
if v_count > 1 then
dbms_output.put_line('有数据条数:'||v_count);
elsif v_count > 5 then
dbms_output.put_line('有数据条数>>'||v_count);
else
dbms_output.put_line('有数据条数>>>'||v_count);
end if;
end;
--循环
declare
v_num number := 10;
begin
loop
exit when v_num < 0 ;
dbms_output.put_line(v_num);
v_num := v_num -1;
end loop;
end;
INSERT INTO EMP VALUES('WANGHONGXIA',1000000);
--游标(像集合迭代器),声明、打开、使用(fetch游标中的数据)、关闭
declare
cursor c_emp is select * from emp;
v_name emp.ename%type;
v_sal emp.esal%type;
begin
open c_emp;
loop
fetch c_emp into v_name,v_sal;
exit when c_emp%NOTFOUND;
dbms_output.put_line(v_name||','||v_sal);
end loop;
close c_emp;
end;
--带参数的游标(在打开游标的时候传值)
declare
cursor c_emp(c_name emp.ename%type) is select * from emp where ename = c_name;
v_name emp.ename%type;
v_sal emp.esal%type;
begin
open c_emp('WANGHONGXIA');
loop
fetch c_emp into v_name,v_sal;
exit when c_emp%NOTFOUND;
dbms_output.put_line(v_name||','||v_sal);
end loop;
close c_emp;
end;
--存储过程
create or replace procedure p_hello as
begin
dbms_output.put_line('hello world');
end;
call p_hello();
exec p_hello();
exec p_hello; --没有参数时,这样也可以
--输入参数
create or replace procedure p_querynameandsal(i_name in emp.ename%type) as
v_emp emp%rowtype ;--只能存储一行数据
begin
select * into v_emp from emp where ename = i_name;--结果只能是一行数据
dbms_output.put_line(v_emp.ename||','||v_emp.esal);
end;
exec p_querynameandsal('WANGHONGXIA');
--输出参数
create or replace procedure p_querysalbyname(i_name in emp.ename%type,o_sal out emp.esal%type) as
v_emp emp%rowtype ;--只能存储一行数据
begin
select * into v_emp from emp where ename = i_name;--结果只能是一行数据
o_sal := v_emp.esal;
end;
declare
v_sal emp.esal%type;
begin
p_querysalbyname('wanglei',v_sal);
dbms_output.put_line(v_sal);
end;
Oracle的存储过程
最新推荐文章于 2024-03-22 17:42:06 发布