1. 程式人生 > >oracle儲存過程中應用動態sql

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;