반응형
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
반응형
'programing' 카테고리의 다른 글
.success and .error로 Angularjs에서 $q 약속을 확장하려면 어떻게 해야 합니까? (0) | 2023.10.15 |
---|---|
입력 유형="숫자"에서 웹킷의 스핀 버튼을 비활성화하시겠습니까? (0) | 2023.10.15 |
C의 부호 없는 16진수 상수? (0) | 2023.10.15 |
월을 이름에서 숫자로 바꾸다 (0) | 2023.10.15 |
MySQL에 BLOB 및 CLOB 파일을 삽입하는 방법? (0) | 2023.10.15 |