DECLARE와 BEGIN 사이를 선언부라고 한다.
:= 을 통해 초기화를 하지 않으면 DEPTNO 에는 NULL이 들어간다
CURSOR 커서이름 IS 이하의 SELECT가 CURSOR의 정의한다. (CURSOR는 PL/SQL을 쓰는 이유)
SELECT를 하게 되면 DBMS 내부에 RS(Result Set)이 만들어짐.
BEGIN, EXCEPTION 실행부
EXCEPTION, END 예외처리부
예외처리 ? CATCH와 LOG
(2) 통합성 - 중요
PL/SQL에서 BLOCK 이란?
[BLOCK]
DECLARE
BEGIN
EXCEPTION
END
Anonymous 블럭은 이름이 없는 블럭
이름을 붙이는 이유? 불러서 계속 쓸려고
(3) 성능
PL/SQL은 전체 BLOCK을 한 번에 DBMS 서버에 보낸다 → 이렇게 생각하면 돼
PL/SQL 의 목적 ? 생산성과 효율성을 고려!
왜 효율적 ? 데이터가 이동하지 않고, 처리 로직이 이동하기 때문
PL/SQL 성능 저하 요인 : NON-SQL과 SQL 사이를 빈번하게 CONTEXT SWITCHING 하면 OVERHEAD 발생
PL/SQL 은 별도의 디버깅 툴이 없다.
그래서 SET SERVEROUTPUT ON (이걸 해야) 과 DBMS_OUTPUT.PUT_LINE ~ (이게 돼)
이 두 라인으로 디버깅을 수행할 수 있다.
/ 는 블록을 DBMS 서버로 보낸다는 의미이다.
i) Anonymous Block (클라이언트 내부에 존재)
BEGIN ~ END 블록이 통째로 DBMS 서버로 가서 실행된 후 1,2,3,...,9,10 이 출력된다 (BUFFER에 담김)
named block은 dbms 서버 안에 생성된다
실행부는 반드시 있어야 함
-- 실행유무
1번째 O
2번째 X
3번째 O
4번째 X
BEGIN 밑에 IF 절 NULL 비교 불가
NULL 의 NOT은 NULL
BLOCK과 TRANSACTION은 상관이 없다. (PPT X)
BLOCK의 범위와 TRANSACTION의 범위는 아무런 관계가 없다!
3번째 INSERT 실패
MAIN으로 던지고, MAIN도 못 받으니까 밖으로 던지고 이 행위를 Exception propagation 이라고 한다.
왜 그런지 이유도
1번째 commit ?
2번째 commit ?
PREDEFINED 이름이 있다!
NO_DATA_FOUND, TOO_MANY_ROWS 는 암기하세요
NON-PREDEFINED 이름이 없다!
ORA : 에러 코드 / 00001 : 에러 메시지
INSERT 예외가 발생하면 77번, 78번은 INSERT하지 않고, break 됨을 알 수 있다.
여기서 NULL 은 명령어이다.
99번은 COMMIT이 안되었음. ROLLBACK을 할 경우 99번만 ROLLBACK 된다.
'데이터베이스' 카테고리의 다른 글
[PL/SQL] 알고 있어야 하는 필수 상식 (0) | 2019.06.19 |
---|---|
[PL/SQL] Data Type (0) | 2019.06.18 |
오라클 실습 - VIEW (0) | 2019.06.12 |
오라클 정리 (190612) (0) | 2019.06.12 |
오라클 - 기본키와 외래키 (190611) (0) | 2019.06.11 |