1. 程式人生 > >二十二、儲存過程:高效率執行

二十二、儲存過程:高效率執行

                                  儲存過程:高效率執行

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;