2009-04-21 13 views
2

Oracleカーソル(Oracle 10g)を動的​​に移入する必要があります。 SQL文は、異なる表および列から取得する入力値に基づいて変更されます。私がしたくないのは、sprocが実行されるたびに切り捨ててロードする一時テーブルを維持することです。ここでは、私が現在やっているものですが、別の選択肢がある場合、私は助けいただければ幸いです:ストアドプロシージャストアド・プロシージャ内のOracleカーソルを動的に移入

PROCEDURE Get_Type_One_Polygon_Values(in_role VARCHAR2, rc_generic OUT SYS_REFCURSOR) as 
BEGIN   

     execute immediate 'truncate table teamchk.temp_type_one_roles'; 

     execute immediate 'INSERT INTO TEAMCHK.TEMP_TYPE_ONE_ROLES ' || 
          'SELECT ' || in_role || '_POLY_ID, ' || in_role || '_POLY_NAME ' ||  
          'FROM TEAMCHK.' || in_role;   

     open rc_generic for       
     select * from teamchk.temp_type_one_roles; 

END; 

一時テーブル簡単です

CREATE TABLE TEAMCHK.TEMP_TYPE_ONE_ROLES 
(
    ROLE_ID  NUMERIC(38,0), 
    ROLE_NAME VARCHAR2(75)   
); 
+0

これはちょうど私が必要とした答えでした。なぜ私はそれを見落としたのか分かりません!ところで、 –

+0

グローバルな一時テーブルは、一般的には切り捨てる必要はありません。 –

答えて

3

、あなた使用可能dynamic cursors ...

create or replace PROCEDURE Get_Type_One_Polygon_Values 
(in_role VARCHAR2, rc_generic OUT SYS_REFCURSOR) as 
sql varchar2(100); 
BEGIN   
      sql :='SELECT ' || in_role || '_POLY_ID, ' 
       || in_role || '_POLY_NAME ' 
       || 'FROM TEAMCHK.' || in_role;   

      open rc_generic for sql; 
END; 

カラムエイリアスPOLY_IDとPOLY_NAMEを使用して、すべてをrefcursorで統一すると便利です。

関連する問題