二十二、儲存過程:高效率執行
阿新 • • 發佈:2018-12-02
儲存過程:高效率執行
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;