二十二、存储过程:高效率执行

版权声明:本文为博主原创文章,未经博主允许欢迎转载,请注明原文链接。一起交流,共同进步。 https://blog.csdn.net/newbie_907486852/article/details/84641425

                                  存储过程:高效率执行

1、存储过程概念及执行

存储过程是存储在数据库服务器端一段或者多段SQL语句的PL/SQL代码块。

创建存储过程:

CREATE PROCEDURE test
AS 
BEGIN
  DBMS_OUTPUT.put_line('测试存储过程的创建');
END; 

PL/SQL窗口执行存储过程:

begin
  -- Call the procedure
  test;
end;

命令窗口执行存储过程:

EXEC  procedure;--procedure是存储过程名

程序中调用存储过程用 call 存储过程名:

hibernateDao.excuteSqlUpdate("{Call proc_stuInfo()}");//存储过程proc_stuInfo

2、通过USER_SOURCE 视图查看存储过程

SELECT * FROM USER_SOURCE WHERE NAME='TEST' ORDER BY LINE

在这里插入图片描述

每个TEXT文本都保存了一段脚本。

3、查看存储过程的错误

在命令行中(TEST存储过程名):

SQL> SHOW ERRORS PROCEDURE FINDEMP
Errors for PROCEDURE SCOTT.FINDEMP:
LINE/COL ERROR
-------- ----------------------------------
4/3      PLS-00428: 在此 SELECT 语句中缺少 INTO 子句

4、无参存储过程


CREATE PROCEDURE findEMP
AS 
BEGIN
  UPDATE EMP SET DEPTNO=15 WHERE EMPNO=7566;
  DBMS_OUTPUT.put_line('成功执行存储过程');
END; 

在存储过程中使用游标:

CREATE PROCEDURE findoneEMP AS
    CURSOR emp_cur
    IS SELECT * FROM EMP;      --声明游标
    emp_var EMP%ROWTYPE;       --声明变量:变量emp_var是表EMP的行类型
    
    BEGIN                      
      OPEN emp_cur;                         --打开游标
           FETCH emp_cur INTO emp_var;      --获取游标数据
           DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);   
           --输出数据
      CLOSE emp_cur;                        --关闭数据  
    END;

5、有参储存过程

CREATE PROCEDURE getEMP (emp_no IN number)
AS
    emp_var EMP%ROWTYPE;       --声明变量:变量emp_var是表EMP的行类型

    BEGIN                      
      SELECT * INTO emp_var FROM EMP WHERE EMPNO=emp_no;
      IF SQL%FOUND THEN 
        DBMS_OUTPUT.put_line('==========================');
        DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);   
      END IF;
    END;

猜你喜欢

转载自blog.csdn.net/newbie_907486852/article/details/84641425
今日推荐