存储过程的编写

参考视频:https://www.imooc.com/video/7256

常见语法参考:https://www.cnblogs.com/chinafine/articles/1776085.html

oracle存储过程的编写,在plsql基础上编写。

存储过程是没有返回值的,但是可以通过out参数返回值。

1.存储过程的调用(2中方式)

    在sql窗口执行一下:

    a.

              begin                                     

                   pro_name();

              end;

    b.

               exec  pro_name();

    c. 在java代码中调用,没有返回值

      <select id="selPolice"  statementType="CALLABLE">
          {CALL  pro_name }

          {CALL  pro_name(param) }               //有参数时的调用
     </select> 

    d. 在plsql工具右键运行

      

1.无参数--存储过程

    CREATE OR REPLACE PROCEDURE HELLO   

    AS                                           //AS  后面是说明部分比如声明变量       AS  也可以是  IS  但不可以省略

    begin                                      //  这里面是要写的     程序

            dbms_output.put_line("hello world");

     end;                                     //end结束   也可以加上存储过程名称  end HELLO;

2.有参数-不提交回滚-存储过程(存储过程最好不要提交或回滚事务,由上级程序来处理)

   CREATE OR REPLACE PROCEDURE HELLO  (param  in  number)   

                                                  //  (param  参数   in指明是输入参数(这里必须直面输入还是输出 in/out )  number是参数类型)

    AS                 

        newname    tablename.name%type;         //指明newname  类型和tablename表的name类型一致              

    begin                                    

            select name into newname from tablename where name = param;  //将查询的结果赋值到newname中

            update tablename set name='张三' where  name = param;

     end;

3.有输入参数--有提交回滚--存储过程 

   CREATE OR REPLACE PROCEDURE HELLO  (param  in  number)   

                                                  //  (param  参数   in/out指输入输出参数(不写默认为in )  number是参数类型)

    AS                 

        newname    tablename.name%type;         //指明newname  类型和tablename表的name类型一致              

    begin                                                                             //  这里面是要写的     程序

            select name into newname from tablename where name = param;

            update tablename set name='张三' where  name = param;

            COMMIT;                                                                //提交事务
           EXCEPTION   WHEN OTHERS THEN    ROLLBACK;              //报错时会回滚事务
                   DBMS_OUTPUT.PUT_LINE('没有成功执行TOLHJC_FEEDBACK');
           COMMIT;

     end;

 

4.有输出参数--存储过程

    在调用存储过程时,h就是返回的值

 

 

输出参数的变量 varchar2不能定义长度

5.带有游标--存储过程   

游标就是一个结果集合的定义,类似于list;

游标包含:隐式游标    :适用返回 单行的数据

                 显示游标    :适用返回 多行的数据

有声明的游标,都是显示游标。

CREATE OR REPLACE PROCEDURE HELLO  IS
      cursor  CURSORNAME is SELECT *  FROM TABLENAME;                   --声明游标指定结果集
      rel   TABLENAME%rowtype ;                                                                    --声明变量用于接收游标中的值
begin
    open CURSORNAME ;--打开游标

    IF  CURSORNAME%ISOPEN   THEN                             --游标是否开启
       loop --开始遍历
          fetch CURSORNAME into rel;                                    --提取游标 赋值给记录类型变量
          exit when CURSORNAME %notfound;                      --提取不到退出循环  

          DELETE FROM TABLENAMET WHERE   id =rel.id ;                //遍历业务逻辑
 
       end loop;--结束循环

    END IF; 
    close CURSORNAME ;                                                        --关闭游标

    COMMIT;                                                                            //业务执行完 提交事务      看情况是否需要写这个
end;

 

6.带参数--游标

 

本文链接:https://my.lmcjl.com/post/12642.html

展开阅读全文

4 评论

留下您的评论.