zygod的gravatar头像
zygod 2016-02-22 13:36:45
总结之存储过程

~一 创建存储过程  www.2cto.com 

Java代码 

CREATE OR REPLACE PROCEDURE cuiyaonan2000(存储过程名) 

    参数1  IN  NUMBER, 

    参数2  IN  NUMBER, 

    参数3  OUT  Number  //如上是in表示你传递给存储过程的参数,out表示存储过程返回给你的参数.可以有多个.不同于下面的变量 

) IS/AS  //这里用IS 还是用AS 随个人习惯,没有什么区别 

变量1 INTEGER :=0; 

变量2 DATE; //如上这些是变量是存储过程的内部变量,相当于在方法内申请的局部变量.当然有全局变量,在此不做介绍.作用就是在下面的语句块中使用,和方法内部变量一致.变量可以有多个.    www.2cto.com 

BEGIN 

这里是一些用if,while,for等流程语句控制的多个sql; 

END cuiyaonan2000 //结束标志 

 

用例环境oracle数据库 PL/SQL Developer

Java代码 

create or replace procedure cuiyaonan2000(a in number,b out number)IS 

    first1 char; 

    second2 number(1); 

    third3 number := 123; 

    begin 

        NULL;  

    EXCEPTION 

        WHEN NO_DATA_FOUND THEN 

            dbms_output.put_line('数据未找到错误'); 

        when others then  

            dbms_output.put_line('未知错误'); 

    END; 

end cuiyaonan2000; 

//如上 := 是给变量赋值的 传统意义上的 等号  

//如上 := 是给变量赋值的 传统意义上的 等号 

//如上exception when 就是 拦截异常 跟Try catch 一样 

//No_data_found 是异常名 others指所有异常 

// dbms_output.put_line 是数据库方法 如同system.out.println 

 

二.    流程控制语句  www.2cto.com 

     IF流程语句:

 

Java代码 

   create or replace procedure cuiyaonan2000(a in number,b out number)IS 

    first1 char; 

    second2 number(1); 

    third3 number := 123; 

    begin 

        if a > 0 then 

                begin 

                    dbms_output.put_line(a); 

                b:= 123; 

                    dbms_output.put_line(a); 

            end; 

            end if; 

            if third3 > 0 then 

                begin 

                    dbms_output.put_line(third3); 

                    third3 := third3 +1; 

                    dbms_output.put_line(third3); 

                end; 

            end if; 

xception 

                WHEN NO_DATA_FOUND THEN 

                dbms_output.put_line('数据未找到错误'); 

when others then  

                dbms_output.put_line('未知错误'); 

    end cuiyaonan2000; 

    //如上的传入参数a 不能再赋值,否则报错 

    //如上 := 是给变量赋值的 传统意义上的 等号 

    //b 用来接收 cuiyaonan2000存储过程返回的结果.少参数调用报错 

         FOR流程语句

Java代码 

create or replace procedure cuiyaonan2000(a in number,b out number)IS 

            Cursor cursor is select name from test_table_user; 

        begin 

        FOR temp IN cursor LOOP 

                dbms_output.put_line(temp.name); 

        END LOOP; 

    exception 

            WHEN NO_DATA_FOUND THEN 

                    dbms_output.put_line('数据未找到错误'); 

            when others then  

                    dbms_output.put_line('未知错误'); 

        end cuiyaonan2000; 

    //如上 cursor 是游标 跟jdbc的游标差不多 指向一条记录.然后用循环来遍历所有查到的记录.这里for temp in 后必须是记录集合    www.2cto.com 

 

   WHILE流程语句

Java代码 

create or replace procedure cuiyaonan2000(a in number,b out number)IS 

                c number :=1; 

            begin      

                while c < 10 LOOP  

                    begin     

                            c:= c + 1; 

                            dbms_output.put_line(c); 

 

                    end;  

                end LOOP; 

            exception 

                WHEN NO_DATA_FOUND THEN 

                        dbms_output.put_line('数据未找到错误'); 

                    WHEN others then  

                        dbms_output.put_line('未知错误'); 

        end cuiyaonan2000; 

        www.2cto.com 

这是些简单的用例,建议大家看完这些后再去研究下游标.如何调用存储过程可以在 plsql的sql命令中输入如下的代码

Java代码 

   //这里是 plsql sql窗口的测试写法 

   //i 用来接收 cuiyaonan2000存储过程返回的结果.少参数也报错 

declare  

  i integer; 

begin 

  cuiyaonan2000(1,i); 

end;  


打赏
最近浏览
zygod  LV17 2016年7月8日
最代码官方  LV168 2016年2月24日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友