본문 바로가기

데이터베이스

[PL/SQL] 개요 및 주요 특징

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