Cursor for loop in Oracle
To address issues associated with the second approach in your question you need to use
cursor variable and explicit way of opening a cursor and fetching data. It is not
allowed to use cursor variables in the FOR
loop:
declare l_sql varchar2(123); -- variable that contains a query l_c sys_refcursor; -- cursor variable(weak cursor). l_res your_table%rowtype; -- variable containing fetching data begin l_sql := 'select * from your_table'; -- Open the cursor and fetching data explicitly -- in the LOOP. open l_c for l_sql; loop fetch l_c into l_res; exit when l_c%notfound; -- Exit the loop if there is nothing to fetch. -- process fetched data end loop; close l_c; -- close the cursorend;
You're not executing that sql string anywhere. Simply do this
v_sql := 'select id, name from students';open cur for v_sql;for rec in cur loop -- do anythingend loop;
Or you can do this
cursor cur is select id, name from students;open cur;for rec in cur loop -- do anythingend loop;
Or you can do this
for rec in (select id, name from students) loop -- do anythingend loop