SQL 오라클 PL/SQL
오라클에서 지원하는 프로그래밍 언어의 특성을 수용한 SQL의 확장
PL/SQL Block내에서 SQL의 DML(데이터 조작어)문과 QUERY(검색어)문, 그리고 절차형 언어(IF,LOOP)등을 사용하여 절차적 프로그래밍을 가능하게 한 강력한 트랜잭션 언어이다.
장점 :
프로그램 개발의 모듈화
-Block내에서 논리적으로 관련된 문장들을 기술한다.
-강력한 프로그램을 작성하기 위해 Block내에 Sub Block들을 포함한다.
-복잡한 프로그램을 의미있고 잘 정의된 작은 Block들로 나눈다.
변수 선언
-변수, 상수등을 선언하여 SQL과 절차형 언어에서 사용한다.
-단일형데이타타입과 복합형 데이터타입을 선언할 수 있다.
-테이블과 칼럼의 데이터 타입을 기반으로 하는 유동적인 변수를 선언 할 수 있다.
절차형 언어의 사용
-IF문을 사용하여 조건에 따라 일련의 문장을 실행한다.
-LOOP문을 사용하여 일련의 문장을 반복적으로 실행한다.
-Explicit Cursor를 사용하여 여러 행을 검색힌다.
에러 처리
-Exception 처리 루틴을 사용하여 오라클 서버 에러를 처리한다.
-사용자 정의 에러를 선언하고 Exception 처리 루틴에서 처리한다.
이식성
-PL/SQL은 오라클에 내장되어 있으므로 오라클과 PL/SQL을 지원하는 어떤 호스트로도 프로그램을 옮길 수 있다.
성능 향상
-PL/SQL은 응용 프로그램의 성능을 향상시킬 수 있다.
-PL/SQL은 여러 SQL 문장을 Block으로 묶고 한번에 Block 전부를 서버로 보내기 때문에 통신량을 줄일 수 있다.
PL/SQL 프로그램의 작성 요령
PL/SQL 블럭내에서는 한 문장이 종료할 때마다 세미콜론(;)을 쓴다.
END뒤에 ;을 사용하여 하나의 불럭이 끝났다는 것을 명시한다.
PL/SQL 블럭의 작성은 편집기를 통해 파일로 작성할 수도 있고 SQL프롬프트에서 바로 작성할 수도 있다.
SQL*PLUS환경에서는 DECLARE나 BEGIN이라는 키워드로 PL/SQL블럭이 시작하는 것을 알 수 있다.
CREATE 명령이 실행되기 위해서는 /가 필요하다.
PL/SQL의 기본 Block 구조
DECLARE - 변수, 상수, 커서, 에러를 선언 (생략가능)
BEGIN - DB와 Interact(SQL 문 사용), PL/SQL제어문 (필수)
EXCEPTION - 에러 발생시 처리해야 할 문장을 기술(생략가능)
END ; - 필수
progam의 종류
subprogram
-function : return a value
-procedure : do action
자동 실행 program
-TRIGGER
FUNCTION
CREATE [OR REPLACE] FUNCTION function명
[(parameter1 parameter타입 parameter데이터 타입,
parameter2,...)]
return 데이터타입
IS
변수선언
BEGIN
RETURN(값);
EXCEPTION
END;
PROCEDURE
CREATE [OR REPLACE] PROCEDURE procedure명
[(parameter1 parammeter 타입 parameter 데이터타입,
parameter2,...)]
IS
변수선언
BEGIN
EXCEPTION
END;
PARAMETER 타입
IN - 실행환경에서 PROGRAM로 값을 전달
OUT - PROGRAM에서 실행환경으로 값을 전달
IN OUT - 실행환경에서 PROGRAM로 값을 전달하고, 다시 PROGRAM에서 실행환경으로 변경된 값 전달
변수 선언
Identifier명 [CONSTANT] 데이터 타입 [NOT NULL] [:= 상수값이나 표현식];
Identifier의 이름은 SQL의 Object명과 동일한 규칙을 따른다.
Identifier를 상수로 지정하고 싶으면 CONSTANT라는 키워드를 명시하고 반드시 초기치를 할당한다.
NOT NULL이 정의되어 있으면 초기값을 반드시 지정하고, 정의되어 있지 않을 때는 생략 할 수 있다.
초기값은 할당 연산자(:=)를 사용하여 정의한다.
초기값을 정의하지 않으면 Identifier는 NULL값을 갖게 된다.
일반적으로 한줄에 Identifier를 정의한다.
데이터 타엡에 따른 변수의 종류
scalar 변수
composite 변수
PL/SQL 에서 제공하는 COMPOSITE DATATYPE은 TABLE과 RECORD가 있다.
TABLE TYPE은 DB내의 테이블과는 구별된다.
TABLE TYPE은 1차원 배열과 유사하다.
table type:
DECLARE
TYPE Type 이름 IS TABLE OF scalar 데이터타입 [NOT NULL]
INDEX BY BINARY_INTEGER;
Identyfier 이름 Type이름;
record type
record type은 테이블에서의 행과는 구별된다.
record type은 구조가 3GL에서의 record와 유사하다.
record type은 논리적인 단위로 취급되는 field의 집합이다.
DECLARE
TYPE type이름 IS RECORD
(FIELD명1 데이터타입[NOT NULL{:=표현식}],
FIELD명2 데이터타입[NOT NULL{:=표현식}],...);
Identifier명 Type이름:
%type 변수
장점:
-테이블의 컬럼에 대한 데이터타입을 정확히 모르는 경우에 유용
-컬럼에 대한 데이터 타입이 중간에 변경되는 경우에 유용
%rowtype 변수
장점
-테이블의 컬럼에 대한 테이터타입을 정확히 모르는 경우에 유용
-컬럼에 대한 데이터 타입이 중간에 변경되는 경우에 유용
-SELECT 구문으로 하나의 행을 검색시 유용
-Explicit Cursor를 이용하여 다중 행을 검색시 유용
제어문
IF 조건 THEN
문장;
[ELSIF 조건 THEN
문장;]
[ELSE
문장;]
END IF;
BASIC LOOP
LOOP
문장1;
문장2;
...
EXIT[WHEN 조건];
END LOOP;
FOR 인덱스 IN[REVERSE] 하한.. 상한 LOOP
문장1:
문장2:
...
END LOOP;
WHILE 조건 LOOP
문장1;
문장2;
...
END LOOP;
댓글
댓글 쓰기