oracle儲存過程中應用動態sql
需求背景:對有些資料庫操作較多的功能演算法需求,或使用應用程式程式碼多次連線操作資料,會造成較大效能損耗,或者系統動態引數化如要查詢的表名是存在資料庫裡的,為節減網路連線開銷,建議使用儲存過程實現資料庫操作需求的演算法。動態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;