Dynamic cursor Oracle

匿名 (未验证) 提交于 2019-12-03 01:45:01

问题:

I want to create a dynamic cursor, but my code does not bring me the correct data. What am I doing wrong?

DECLARE  VAR1 VARCHAR2(500);  CURSOR CUR1 IS   SELECT T.COL1 FROM TABLE1 T WHERE T.COL1 IN (VAR1);   BEGIN   VAR1 := q'['V1','V2']';   FOR REG IN CUR1 LOOP    DBMS_OUTPUT.PUT_LINE(REG.COL1);   END LOOP; END; 

回答1:

In short, IN clause doesn't support bind variables.. It supports for only value,in the way you used.. You need to specify it like IN (var1, var2);

Without knowing you , you have used bind variables. One workaround is use REFCURSOR By forming a query string dynamically.

DECLARE  VAR1 VARCHAR2(500);  CUR1 SYs_REFCURSOR;  QUERY_STRING VARCHAR2(2000) := 'SELECT T.COL1 FROM TABLE1 T WHERE T.COL1 IN';   MYREC IS RECORD   (    COL1 VARCHAR(1000);  );   myrecord MYREC;   BEGIN   VAR1 := q'['V1','V2']';   QUERY_STRING:= QUERY_STRING||'('||VAR1||')';    OPEN CUR1 FOR QUERy_STRING;      LOOP       FETCH CUR1 INTO myrecord;       DBMS_OUTPUT.PUT_LINE(myrecord.COL1);       EXIT WHEN v_my_ref_cursor%NOTFOUND;         ..       -- your processing     END LOOP;    CLOSE CUR1;  END; 

One of my other answer also has other way using collections, for bigger IN clause list.



回答2:

--I USED A TABLE IN OUR DB ORACLE 11G R2 --there are some syntax issues above that I corrected --I moved the QUERY_STRING after the BEGIN and added output

DECLARE  VAR1 VARCHAR2(500);  CUR1 SYS_REFCURSOR;  QUERY_STRING VARCHAR2(2000);   TYPE MYREC IS RECORD   (    WO_NBR VARCHAR(1000)  );   myrecord MYREC;  BEGIN   VAR1 := q'['45466','45432']';   QUERY_STRING := 'SELECT T.WO_NBR FROM WO_SCHED T WHERE T.WO_NBR IN  ('||VAR1||')';   DBMS_OUTPUT.PUT_LINE(VAR1);   DBMS_OUTPUT.PUT_LINE(QUERY_STRING);    OPEN CUR1 FOR QUERY_STRING;      LOOP       FETCH CUR1 INTO myrecord;       DBMS_OUTPUT.PUT_LINE(myrecord.WO_NBR);       EXIT WHEN CUR1%NOTFOUND;        -- your processing     END LOOP;    CLOSE CUR1;  END; 


文章来源: Dynamic cursor Oracle
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!