oracle存储过程创建-调试-调用-删除(二)

上一篇文章已经介绍了存储过程简单的创建,调用,调试和删除。这篇文章将会主要讨论一下存储过程中选择循环判断等的用法。

存储过程中变量的定义和赋值

在存储过程里,我们除了可以使用参数,还可以定义一些变量来进行操作。

第一种赋值方式 ::=

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