Oracle

具有動態 sql 的 Oracle 強引用游標

  • October 17, 2014

我正在使用 Oracle 10g。我在儲存過程中有一個查詢,它從表中選擇整行。目前它返回一個強類型引用游標(tablename%rowtype)。現在我必須在這個查詢中添加一些動態 WHERE 子句,但是動態 SQL 不支持強引用游標。之前已經在 SO 上詢問過。我的問題是:有解決方法嗎?使用某種包裝器或轉換或 DBMS 魔法將弱游標轉換為強游標?我可以保證結果與表行類型匹配。

可能有更好的方法來實現您的基本目標,但是如果您真的希望將動態 SQL 中的值轉換為強類型的 refcursor,我想您可以執行以下操作:

create table TESTTABLE(TESTID number not null);
create global temporary table TEMPTESTTABEL(TESTID number not null);

create or replace procedure testprocedure is 
 type testtablerefcursor is ref cursor return TESTTABLE%rowtype;
 type testtabletable is table of TESTTABLE%rowtype;
 mycursor testtablerefcursor;
 mysyscursor SYS_REFCURSOR;
 mytesttable testtabletable;
begin
 open mysyscursor for 'select * from TESTTABLE';
 fetch mysyscursor bulk collect into mytesttable;
 close mysyscursor;
 forall i in mytesttable.first..mytesttable.last
  insert into TEMPTESTTABEL values mytesttable(i);
 open mycursor for select testid from TEMPTESTTABEL;
end;
/

引用自:https://dba.stackexchange.com/questions/59149