본문 바로가기

데이터베이스

[PL/SQL] SELECT & CURSOR

NO_DATA_FOUND, TOO_MANY_ROWS 만 기억해둬!

 

 

INTO를 사용하는 것 기억

 

 

 

 

 

OPEN CUR_EMP; → IS 이하의 SQL을 EXECUTE 한다는 의미 → DBMS 서버 내에 ResultSet이 만들어진다. (실행할 경우)

 

CURSOR에 있는 값을 선언한 변수에 넣는 것이 fetch 

 

CUR_EMP 은 ResultSet 을 가리킴 

 

result set은 테이블이 아니고 서버 내부에 선언된 메모리 덩어리임 

 

close CUR_EMP 하면 result set이 사라짐 

 

CUR_EMP%ROWCOUNT → % 속성 연산자 / 커서를 통해 FETCH한 RECORD 갯수를 화면에 출력하기!!

(몇 건의 데이터가 출력이 되었는지 확인하기 위함)

 

 

 

 

 

 

 

 

 

 

INSERT가 암시적인 커서

명시적 커서만 알고 있으면 돼!

 

 

명시적 커서는 다중행을 조회하고 처리하기 위해 사용

 

 

BIND VARIABLES 알고 있어!

변수에 값을 대입한다는 의미이다

 

ROWCOUNT, NOTFOUND는 알고 있자

 

암시적 커서는 커서 이름이 없고, 명시적 커서는 커서 이름 있다

 

[실습] - 커서 속성을 활용하는 실습 

 

 

 

CUR_EMP%NOTFOUND 명시적 커서의 경우

SQL%NOTFOUND 암시적 커서의 경우

 

 

시험 

1. BLOCK

2. TRANSACTION

3. BLOCK의 종류 ANONYMOUS BLOCK, ...

4. CURSOR 

 

 

 

가능하다

 

받을 변수가 많아질 경우 선언부에 변수가 엄청 많이 늘어날 수 있다.

 

하지만 참조 변수 ROWTYPE을 사용하면 코드를 홀쭉하게 만들 수 있다.

 

선언부에 ROWTYPE을 선언하지 않아도 LOOP로 다음과 같이 사용할 수 있음

 

커서의 정의만 있고, OPEN, FETCH, CLOSE 모두 없다

 

LOOP 내부에서 모두 처리를 해줌 (암시적)

 

여기서 --DBMS_OUTPUT.PUT_LINE 이 부분이 에러가 발생한다.

왜냐하면 LOOP를 종료할 때 암시적으로 커서를 CLOSE 하기 때문!!

 

P_DEPTNO IN NUMBER 에서 IN은 생략이 가능하다.

 

 

 

 

*** Stored block

function,

procedure,

package → 변수 + function + procedure 

trigger 

 

 

IS 대신 AS 사용을 할 수 있음 

 

 

 

 

체크해두시죠

 

'calc_bonus' 를 대문자로 써야한다. 

 

 

 

SELECT로 함수를 호출할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'데이터베이스' 카테고리의 다른 글

[SQLP] DML 실행 순서  (0) 2020.06.20
[PL/SQL] 모듈 (Stored Block)  (0) 2019.06.21
[PL/SQL] 알고 있어야 하는 필수 상식  (0) 2019.06.19
[PL/SQL] Data Type  (0) 2019.06.18
[PL/SQL] 개요 및 주요 특징  (0) 2019.06.17