Search code examples
sqloracle-databaseplsqlplsqldeveloper

How to create cursor inside procedure body in plsql


I want create cursor inside procedure body dynamically also i have to use for loop instead of below code. i did the dynamic cursor but i cannot use the for loop.

PROCEDURE myprocedure
AS
  LV_TEST_CUR SYS_REFCURSOR;
  LV_QUERY VARCHAR2(200);
  LV_DATE  DATE;
BEGIN
  LV_QUERY:='select sysdate as mydate from dual';
  OPEN LV_TEST_CUR FOR LV_QUERY;
  /*FOR CUR_VAR IN LV_TEST_CUR
  LOOP
  dbms_output.put_line(CUR_VAR.mydate);
  end LOOP;
  */
  LOOP
    FETCH LV_TEST_CUR INTO LV_DATE;
    EXIT
  WHEN LV_TEST_CUR%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(LV_DATE);
  END LOOP;
  CLOSE LV_TEST_CUR;
END myprocedure;

if i am using commented code(for loop), i getting error

PLS-00221: is not a procedure or is undefined.

Is it possible using for loop in dynamic cursor?


Solution

  • you cannot reference a cursor variable in a cursor FOR loop

    but you can use the select statment direct:

    create or replace PROCEDURE myprocedure
    AS
      LV_TEST_CUR SYS_REFCURSOR;
      LV_QUERY VARCHAR2(200);
      LV_DATE  DATE;
    BEGIN
      FOR CUR_VAR IN (select sysdate as mydate from dual)
      LOOP
      dbms_output.put_line(CUR_VAR.mydate);
      end LOOP;
    
    END myprocedure;
    /