需求背景:對有些數據庫操作較多的功能算法需求,或使用應用程序代碼多次連接操作數據,會造成較大性能損耗,或者系統動態參數化如要查詢的表名是存在數據庫裏的,爲節減網絡連接開銷,建議使用存儲過程實現數據庫操作需求的算法。動態sql ,意思是sql語句並不是事先明確的,而是可根據參數變化的,通常是我們在存儲過程中拼接生成sql字符串,並執行這個字符串返回結果。
1.創建存儲過程語法:
CREATE OR REPLACE PROCEDURE 存儲過程名稱( 參數列表)
Is
變量定義;
Begin
邏輯實現;
End 存儲過程名稱;
例子:
CREATE OR REPLACE PROCEDURE GZGPORTAL.POSITION_JOB_PAY(
orgUnitLongNumber varchar2,
isSub char,
beginYearMonth varchar2,
endYearMonth varchar2,
isPosition char,
returnSet OUT sys_refcursor //返回值 ,遊標類型,可用於返回結果集
)
IS
horTableName varchar2(30);
hisTableName varchar2(30);
insertSQL VARCHAR2(2000);
Begin
。。。。。
End POSITION_JOB_PAY ;
2.存儲過程動態sql
sqlstr := 'delete t_temp_orgSecheme' ;
EXECUTE IMMEDIATE (sqlstr);
Commit;
3.執行動態sql 返回結果集
returnSet OUT sys_refcursor ; 定義返回值變量,遊標類型
open returnSet for
select * from table;
return returnSet;