- PL/SQL의 장점 : 프로시서 생성자와 SQL의 통합, 모듈식 프로그램, 이식성, 예외 처리 가능
- DECLARE는 선택 사항, BEGIN은 필수, EXCEPTION은 선택 사항, END;/는 필수 사항
- 프로시저란 리턴 값을 하나 이상 가질 수 있는 프로그램을 말한다
- 함수란 리턴 값을 반드시 반환해야 하는 프로그램을 말한다
- 패키지란 하나 이상의 프로시저, 함수, 변수, 예외 등의 묶음을 말한다.
- 지정된 이벤트가 발생하면 자동으로 실행하는 블록을 트리거라고 한다.
- PL/SQL Block의 종류는 이름 있는 블록(프로시서, 함수, 패키지, 트리거), 익명 블록으로 나뉜다.
- 변수의 선언은 DECLARE절에서만 가능하다. 그리고 BEGIN 섹션에서 새 값이 할당될 수 있다.
- 단일 값을 저장하고 있는 변수 : 스칼라 변수
- 컬럼의 데이터 양식을 참조하는 데이터 타입 : 참조 변수
- %TYPE를 통해서 해당 컬럼을
- NOT NULL과 CONSTANT는 꼭 초기화를 해주어야 한다.
- PL/SQL에서 사용 가능한 SQL은 Query, DML, TCL이다.
- DDL (CREATE, DROP, ALTER, TRUNCATE …), DCL (GRANT, REVOKE) 명령어는 동적 SQL을 이용할 때만 사용 가능하다. - PL/SQL의 SELECT문은 해당 SELECT의 결과를 PL/SQL Engine으로 보낸다. 이를 캐치하기 위한 변수를 DECLARE해야 하고, INTO절을 꼭 선언하여 넣을 변수를 꼭 표현해주어야 SELECT 문장은 반드시 한 개의 행이 검색되어야 한다. 그리고 이를 INTO절을 꼭 사용해야한다. 또한 검색되는 행이 없으면 문제가 발생한다.
- SQL%ROWCOUNT : 바로 전 명령문에 의하여 영향 받는 ROW들의 개수가 저장되어 있다.
- 이름 지정 모호성 : 변수 명과 테이블의 컬럼 명과 같은 경우, 테이블의 컬럼으로 우선하여 수행한다.
- - IF와 NULL : NULL의 비교는 항상 NULL이 때문에, ELSE 이하 문만 수행된다
- CASE 표현식 : 단순하게 조건문에 따른 값을 대입할 때 사용된다. THEN절에 특정 값이 사용될 때 필요하다
- CASE 조건문 : THEN 절에서 단순한 값이 아닌 PL/SQL문 (명령문)을 실행 시키고자 하는 경우에 CASE 조건문을 사용해야 한다. CASE 조건문은 끝이 END CASE로 끝난다.
- For Loop : lower_bound..upper_bound이므로, lower_bound가 upper_bound 보다 큰 경우 FOR 루프를 진입하지 않는다. 따라서 REVERSE 키워드를 넣으면 반대로 counter가 내려간다.
- 루프 안에 카운터만 참조해야 하며, 루프 밖에는 카운터가 정의되어 있지 않다. 또한 카운터를 할당 대상으로 참조하는 것을 피해야하며, 루프의 상한이나 하한을 NULL일 수 없다
- 테이블이름%ROWTYPE : 참조 타입인 %ROWTYPE이 더 많이 사용될 수 있으나, 필요하다면 레코드 타입을 선언하고 사용할 수 있다. 다음은 %ROWTYPE를 활용하여 emp 테이블의 한 줄의 ROW을 rec_emp 변수에 저장한 예제이다
- 이 레코드 구조체의 제약은 검색되는 행의 개수가 반드시 하나여야 한다. 없어도 안되고, 두개 이상이어도 안된다.
- PL/SQL Record 사용 : 위와 같은 경우 한 ROW을 모두 조합하여 가지고 온다. 하지만 특정 컬럼들만으로 레코드 구조체를 만들고 싶은 경우 PL/SQL Record를 사용하면 된다.
'PL SQL' 카테고리의 다른 글
PL/SQL 예외 처리 (Exception Handling) - 3 (미리 정의되지 않은 에러) (0) | 2016.07.06 |
---|---|
PL/SQL 예외 처리 (Exception Handling) - 2 (미리 정의된 에러) (0) | 2016.07.06 |
PL/SQL 예외 처리 (Exception Handling) - 1 (예외 처리의 정의와 발생 상황, 유형) (0) | 2016.07.06 |
PL/SQL 명시적 커서, 암시적 커서 (Implicit Cursor, Explicit Cursor) - 2 (0) | 2016.07.06 |
PL/SQL 명시적 커서, 암시적 커서 (Implicit Cursor, Explicit Cursor) - 1 (0) | 2016.07.06 |