programing

Oracle에서 루프용 커서

topblog 2023. 10. 15. 16:56
반응형

Oracle에서 루프용 커서

오라클에서 루프에 커서를 사용하는 방법을 설명해주세요.

다음 코드를 사용하면 다 괜찮습니다.

for rec in (select id, name from students) loop
    -- do anything
end loop;

하지만 이 sql 문에 변수를 정의하면 작동하지 않습니다.

v_sql := 'select id, name from students';

for rec in v_sql loop
    -- do anything
end loop;

오류: PLS-00103

질문의 두 번째 접근 방식과 관련된 문제를 해결하려면 사용해야 합니다.

커서 변수와 커서를 열고 데이터를 가져오는 명시적인 방법.그것은 아니다.

커서 변수를 사용할 수 있습니다.FOR루프:

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 cursor
end;

자세히 알아보기

시도해 보십시오.

cursor v_sql is
select id, name from students;

for rec in v_sql 
loop
    -- do anything
end loop;

그럴 필요가 없겠군요open,fetch아니면close커서

그 sql 문자열을 실행할 수 없습니다.그냥 이렇게 하기만 하면 됩니다.

v_sql := 'select id, name from students';
open cur for v_sql;
for rec in cur loop
    -- do anything
end loop;

아니면 할 수 있습니다.

cursor cur is select id, name from students;
open cur;
for rec in cur loop
        -- do anything
end loop;

아니면 할 수 있습니다.

for rec in (select id, name from students) loop
    -- do anything
end loop

런타임에 쿼리를 작성하는 경우 Refcursor를 사용해야 합니다.실제로 Refcursor는 가져온 행에 대한 공간을 차지하지 않는 쿼리에 대한 포인터입니다.일반 커서는 작동하지 않습니다.

declare 
v_sql varchar2(200);
rec sys_refcursor;
BEGIN
v_sql := 'select id, name from students';

open rec for v_sql 
loop
fetch
exit when....
-- do anything
end loop;

언급URL : https://stackoverflow.com/questions/18274258/cursor-for-loop-in-oracle

반응형