Jam's story

[Oracle]days15- cursor 본문

Oracle

[Oracle]days15- cursor

애플쩀 2022. 4. 22. 16:36
cursor

CURSOR란 PL/SQL 블럭 내에서 실행되는 SELECT 문을 의미한다.

 

select 문에서 여러개의 레코드를 처리하기위해서 커서를 사용해야한다.

커서에  select문의처리된 결과가 저장되어있는데, 그것을 하나씩 가져온댜. 

 

implicit cursor
(묵시적)
일반적으로 사용된는 SQL문을 묵시적 커서라 한다. 한 번 실행에 하나의 결과를 반환하는 SQL문을 의미 함
explicit cursor
(명시적)
SQL문을 실행했을 때 그 결과가 여러 개인 경우에 묵시적 커서를 사용하면 해당 SQL문은 에러가 발생함
이유는 묵시적 커서에 사용되는 스칼라 변수는 한 번에 하나의 값만 저장할 수 있기 때문임이렇게 여러 개의 행이 반환되는 SQL문을 실행하는 경우에는 반드시 명시적 커서를 사용해야 함

 

 

 

명시적 커서

명시적 커서에서는 다음과 같은 구성으로 이루어진다.

CURSOR 선언OPENFETCHCLOSE

명시적커서 
1)커서선언
2)커서 OPEN
3)LOOP

--처리 FETCH 가져오다.

EXIT WHEN 커서가 읽을 것이 없을 때 까지  

END LOOP
커서 CLOSE 

 

커서선언 

CURSOR [커서명]
IS
 [SELECT절];
OPEN [커서명];
FOR
 FETCH [커서명] INTO [변수명];
 EXIT WHEN [조건절];
END LOOP;
CLOSE [커서명];

CURSOR [커서명]
IS
 [SELECT절];
OPEN [커서명];
FOR
 [record명] IN [커서명] LOOP
   [처리부]
END LOOP;

 

empno를 입력해서 3명 가져오기 

 

declare 
vempno emp.empno%type;
vename emp.ename%type;
vsal emp.sal%type;
cursor emp_cursor is(
    select empno, ename, vsal
    from emp
    where deptno= :pdeptno
);
begin
    open emp_cursor;
    loop
    fetch emp_cursor into vempno, vename, vsal;
        dbms_output.put_line(vempno ||','||vename||','||vsal);
    exit when emp_cursor%notfound or emp_cursor%rowcount>=3;
    end loop;
    close emp_cursor;
    end;
declare 
   type emptype is record
   (
    empno emp.empno%type
    ,ename emp.ename%type
    ,sal emp.sal%type
   ); 
   vrow emptype; 
   cursor emp_cursor is select empno, ename, sal  from emp;
begin
    open emp_cursor;
    loop
    fetch emp_cursor into vrow;
    dbms_output.put_line(vrow.empno||','||vrow.ename||','||vrow.sal);
        exit when  emp_cursor%notfound;
    end loop;
    close emp_cursor;
end;

'Oracle' 카테고리의 다른 글

[Oracle] days17 -저장함수  (0) 2022.04.26
[Oracle] days15 -저장 프로시저  (0) 2022.04.22
[Oracle] days 15- 설문조사 쿼리 데이터 넣어보기  (0) 2022.04.22
[Oracle] days14 - pl/sql  (0) 2022.04.21
[Oracle ] days14- 시퀀스  (0) 2022.04.21
Comments