Oracle 存储过程

存储过程

存储过程适合做更多操作,特别是大数据量的更新

创建存储过程

create or replace procedure proc1
as|is    --相当于 declare 声明的意思
abc varchar2(100);    --定义该存储过程的变量,作用域就是本存储过程中
begin
update t_user set username='老王' where id=3;
commit;
end;
/


例如:

create or replace procedure proc1
as
begin
update t_user set username='老王' where id=3;
commit;
end;
/

调用存储过程

exec proc1;



带输入参数的存储过程
创建存储过程

create or replace procedure proc2(
param1 varchar2,param2 varchar2     --存储过程的参数    类型不需要指定宽度(范围)
)
as
begin
insert into t_user values(seq_user.nextval,param1,param2,sysdate);
commit;
end;
/

执行

exec proc2('Owen','121212');
call proc2('Haha','111111');    --在dos窗口下可以

带输出参数的存储过程

create or replace procedure proc3(
param1 in varchar2,param2 out varchar2     --in代表输入参数,out代表输出参数,param0 in out number
)
as
begin
select password into param2 from t_user where username=param1;
dbms_output.put_line(param2);
commit;
end;
/

执行

set serverout on;
var pp varchar2(100);
exec proc3('tom',:pp);


查询结果返回多个字段的存储过程

create or replace procedure proc4(
param1 in varchar2,param2 out varchar2,param3 out varchar2     --in代表输入参数,out代表输出参数,param0 in out number
)
as
begin    --注意:这里只能处理返回的是一条记录结果集,如果结果集含有多条记录,oracle没有提供直接处理的方式,
--必须间接的接触游标,游标本身的效率很差,所以实际开发中基本上不使用
select id,password into param2,param3 from t_user where username=param1;
dbms_output.put_line('查询的结果数据是:id='||param2||'password='||param3);
commit;
end;
/

执行

set serverout on;
var pp1 varchar2(100);
var pp2 varchar2(100);
exec proc4('tom',:pp1,:pp2);

定义变量

param1 varchar2(100);    --变量的类型可以是oracle系统的所有合法的数据类型
param2 number;

用 := 符号 给变量赋值

param1 :='who am i!';
param2 :=123;

判断
if t_value = 1 then
begin
do...
end;
end if;

例:

create or replace procedure proc_if(pp in number)
as
total number;
begin
total := pp;
if total <4 then
begin
insert into t_user values(seq_user.nextval,'苏乞儿','666666',sysdate);    
commit;
end;
end if;
end;
/

exec proc_if(5);

while循环
while t_value = 1 loop
begin
do...
end;
end loop;

例:

create or replace procedure proc_while
as
i number;
begin
i:=1;
while i<100 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
/

exec proc_while;

for循环

for y in 1..100 loop
i:=x*y;
exit when i = 300;
end loop;

例:

create or replace procedure proc_for(pp in number)
as
x number;
i number;
begin
x:=pp;
for y in 1..100 loop
i:=x*y;
exit when i>300;
dbms_output.put_line(i);
end loop;
end;

exec proc_for(6);
原文地址:https://www.cnblogs.com/myjavalife/p/4923176.html