programing

PL/SQL에서 돌아오는 커서를 닫는 방법은?

muds 2023. 10. 3. 11:38
반응형

PL/SQL에서 돌아오는 커서를 닫는 방법은?

저는 PL/SQL을 처음 접했는데 이제 막 학습 과정에서 커서를 잡았습니다.저장된 프로시저 파라미터가 유형과 함께OUT SYS_REFCURSORC 언어의 포인터처럼 '데이터를 반환'하는 것이 목적인 것으로 알고 있습니다.나는 누가 그런 문을 닫을 것인지 궁금했습니다.SYS_REFCURSOR절차가 열려야 하는데 닫지 못하는 경우 parameter? (절차가 종료되는 경우)OUT SYS_REFCURSOR그러면 반환할 데이터가 없습니다.

또한, 저는 저장된 절차 이외에 외부 기능에 의존하는 것은 나쁜 설계라고 생각합니다.OUT SYS_REFCURSOR커서를 닫을 매개변수.커서를 사용하지 않고 저장 프로시저에서 테이블을 반환할 수 있는 방법이 있습니까?

커서가 실제로 어디서 열렸는지에 관계없이 커서가 끝나면 닫기만 하면 됩니다.

-- A function to return a SYS_REFCURSOR
CREATE OR REPLACE FUNCTION f_c RETURN SYS_REFCURSOR IS
    cur SYS_REFCURSOR;
BEGIN
    OPEN cur FOR SELECT LEVEL FROM dual CONNECT BY LEVEL < 10;
    RETURN cur; 
END;

다음은 샘플 런입니다.

DECLARE
  cc SYS_REFCURSOR;
  r  VARCHAR2(10);
BEGIN
  cc := f_c;         -- Get the cursor from the function
  LOOP
    FETCH cc INTO r;
    EXIT WHEN cc%NOTFOUND;
    dbms_output.put_line('Output is: '||r);
  END LOOP;
  CLOSE cc;          -- Close the SYS_REFCURSOR returned from the function
END;
/

Output is: 1
Output is: 2
Output is: 3
Output is: 4
Output is: 5
Output is: 6
Output is: 7
Output is: 8
Output is: 9

함수 또는 프로시저에서 값 집합을 반환하는 경우, 이 주제에 대한 또 다른 SO 질문이 있습니다.

언급URL : https://stackoverflow.com/questions/6128101/how-to-close-a-returning-cursor-in-pl-sql

반응형