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;

댓글

이 블로그의 인기 게시물

javascript ===, ==, >=, <=연산자

SQL oracle 내장함수[문자열 처리]

javascript 데이터 타입과 값