接上篇,游標使用的語句,相當於一段匿名的函數,窗口關閉了就不存在了。如果想要窗口關閉了,還能繼續執行那段代碼,就需要存儲過程了: PLSQL是指一個個PLSQL的業務處理過程存儲起來進行復用,這些被存儲起來的PLSQL程序稱之為存儲過程。
語法:
plsql如何創建存儲過程:
1. 一個簡單的存儲過程,存儲過程名稱為 p_hello
1 create or replace procedure p_hello is 2 --如果需要,在此處聲明變量 3 begin 4 dbms_output.put_line('hello world'); 5 end p_hello; 6 -- 寫完點擊執行,這段語句會被存儲起來
注意,上面存儲過程中 is 關鍵字可以換成as 關鍵字,一樣的效果
存儲過程的調用:打開一個測試窗口,在begin 和end之間寫上存儲過程名,然后點擊執行,就是調用了一次存儲過程
執行結果:
1 begin 2 -- Call the procedure 3 p_hello; 4 end;
2.帶入參存儲過程:
1 --查詢並打印某個員工的姓名,薪水,要求調用時傳入員工編號,控制台自動打印 2 create or replace procedure p_empInfo(i_empno IN emp.empno%TYPE) as 3 --聲明變量 4 v_ename emp.ename%TYPE; 5 v_sal emp.sal%TYPE; 6 begin 7 select ename, sal into v_ename, v_sal from emp where empno = i_empno; 8 dbms_output.put_line('員工編號:' || i_empno || ',姓名:' || v_ename || ',薪水:' || v_sal); 9 10 end p_empInfo;
寫完點擊執行,編譯該存儲過程。
調用:打開一個測試窗口,
1 -- 調用帶入參存儲過程 2 begin 3 p_empInfo(7839); 4 p_empInfo(7902); 5 end;
結果:
3. 帶入參及返回值的存儲過程:輸入員工號查詢某個員工(7839)信息,要求將薪水作為返回值輸出,給調用的程序使用,比如java 程序,c# .net程序等
1 --輸入員工號查詢某個員工(7839)信息,要求講薪水作為返回值輸出,給調用的程序使用 2 create or replace procedure p_empInfo2(i_empno IN emp.empno%TYPE, o_sal out emp.Sal%TYPE) as 3 4 begin 5 select sal into o_sal from emp where empno = i_empno; 6 7 end p_empInfo2;
在測試窗口中調用該存儲過程,需要事先定義一個變量作為 存儲過程返回值的接收參數,在打印語句中打印該參數的值,執行該語句, 輸出結果5000.00
1 -- Created on 2018/6/3 by ADMINISTRATOR 2 declare 3 4 v_sal emp.sal%TYPE; 5 begin 6 p_empInfo2(7839,v_sal); 7 dbms_output.put_line(v_sal); 8 9 end;