上一篇文章已经介绍了存储过程简单的创建,调用,调试和删除。这篇文章将会主要讨论一下存储过程中选择循环判断等的用法。
存储过程中变量的定义和赋值
在存储过程里,我们除了可以使用参数,还可以定义一些变量来进行操作。
第一种赋值方式 ::=
1. 定义的变量要写在as或is关键字后面,begin前面。
2. 定义的变量区别于参数的是,需要指定长度。
3. 定义完的参数可以在begin中对其进行赋值,oracle中赋值的动作不是 = 而是 := 。
4. 参数为in类型的不允许再次赋值了。
5. 下面的参数num虽然存在,但是下面的代码中没有地方引用,所以编译的时候会提醒 ‘已编译但有警告’。
6. commit提交一定要写,否则无法成功完成insert操作。
7. 为字符类型的变量赋值的时候两边要用单引号,数值型则不用。
1 create or replace procedure test3(num number) as 2 age integer;--integer不需要指定长度 3 names varchar2(20);--varchar2 需要指定长度 4 sex integer; 5 begin 6 age:=0;--为上面定义的变量赋值不是用 = 而是用 := 7 names:='张三';-- 为字符型数据赋值两边要加上单引号 8 sex:=1; 9 --num:=1; 这里要注意 参数类型为in的不允许再次赋值了 10 insert into t_user values (sys_guid(),names,age,sex,'12541554040',sysdate); 11 commit; 12 dbms_output.put_line('ok'); 13 end;
第二种赋值方式 :select into
1. select into可以为一个或者多个变量赋值。
2. select into为多个变量赋值的时候需要赋值的变量和查出的变量,顺序要相同。
3. dbms_output.put_line类似于java中的System.out.println();
1 create or replace procedure test4 as 2 age integer; 3 sex integer; 4 begin 5 select age into age from t_user where name = '张三';--单个变量赋值 6 select age,sex into age,sex from t_user where name = '张三';--多个变量赋值 7 commit; 8 dbms_output.put_line('ok'); 9 dbms_output.put_line('年龄:'||age||',性别:'||sex); 10 end;
存储过程中的选择语句
if选择:
(关键字:if,elsif,else,then,end if ) 注意:
1. oracle中的 '否则如果' 写法是elsif 不同于java中的else if
2. if或者是elsif后面都要跟then,不同于java
3. oracle中的这种关键字一般都需要成对出现,所以结尾一定要有end if
1 create or replace procedure test5(num in number) as 2 begin 3 if num>0 then 4 dbms_output.put_line('num>0'); 5 elsif num <0 then 6 dbms_output.put_line('num<0'); 7 else 8 dbms_output.put_line('num=0'); 9 end if; 10 end;
case when选择(类似于if)
注意:
1. case when 最后要以end case结尾
2. 每个when后面都要接then
1 create or replace procedure test6(num in number) as 2 begin 3 case num 4 when 1 then 5 dbms_output.put_line('num=1'); 6 when 2 then 7 dbms_output.put_line('num=2'); 8 else 9 dbms_output.put_line('num=3'); 10 end case; 11 end;
存储过程中的循环语句
存储过程中的基本循环loop循环
关键字: loop,exit when,end loop 注意:
1. loop循环以loop开始 end loop结束。
2. 此段代码的意思是从a等于0开始一直到a>10结束 循环输出。
3. exit when的意思是当什么情况下退出。
1 create or replace procedure test7 as 2 a integer; 3 begin 4 a:=0; 5 loop 6 dbms_output.put_line('num='||a); 7 a:=a+1; 8 exit when 9 a>10; 10 end loop; 11 end;
存储过程中的while循环
关键字: while,loop,end loop
1. 此段代码的意思是如果a<10就循环输出一次a的值。
2. while后面要接条件和loop关键字。
3. 最后要以end loop结尾。
1 create or replace procedure test8 as 2 a integer; 3 begin 4 a:=0; 5 while a<10 loop 6 dbms_output.put_line('num='||a); 7 a:=a+1; 8 end loop; 9 end;
存储过程中的for循环
关键字: for,in,loop,end loop
1. 此段代码的意思是将t_user表中查出的name列数据放到tname中并循环输出。
2. 此段代码用到了游标cursor,不理解的可以暂时不考虑。
3. aname类似于java中for循环的int i中的i。
4. 如果想要从tname中获取name的值,需要用aname.name的方式来获取。
create or replace procedure test9 as Cursor tname is select name from t_user; begin for aname in tname LOOP dbms_output.put_line(aname.name); end LOOP; end;
持续更新!!
来源:https://www.cnblogs.com/flyinghome/p/12154707.html