存储过程
存储过程适合做更多操作,特别是大数据量的更新
创建存储过程
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);