비교문과 반복문을 사용할 수 없는 SQL언어의 단점을 사용가능하게 만든것이 PL/SQL (Procedural Language-SQL) 언어
SQL의 단점
1. 반복처리를 할 수 없다. (loop)
2. 비교처리를 할 수 없다. (if)
3. Error처리를 할 수 없다. (exception처리)
4. SQL문을 캡슐화 할 수 없다.
5. 변수선언을 할 수 없다.
6. 실행할 때마다 분석작업 후 실행
7. Network Traffic을 유발한다.
일반적으로 3GL 언어를 컴파일 언어라고 한다. 즉 미리 실행될 로직(logic)을 작성하여 문법과 테이블의 존재 여부를 컴파일러에 의해 분석하고 그 결과를 바이너리 실행파일로 생성한 후 필요할 때마다 호출하여 실행하는 방법이다.
생성과 실행
Begin
Select * INTO :a,m :b
From emp
where id = 10;
If SQL%NotFound then
....
ENDIF
END;
SQL> Excute SALARY_CAL
PL/SQL 언어 유형
PL/SQL은 기본적으로 DECLARE ~ BEGIN ~ EXCEPTION ~ END; 의 기본 문법을 가지고 있다.
3GL 언어(C,C++,JAVA 등)들을 보면 프로그래밍을 하기 위해 main()함수절을 가지고 있는 것과 동일 한 의미이다.
이러한 기본문법으로 생성할 수 있는 PL/SQL의 종류는 다음과 같이 6가지 종류가 있다.
1. Anonymous Procedure
Anonymous(무명의) PL/SQL 블록은 생성할 때 DECLARE~ 문법으로 시작된다.
사용자가 반복적으로 실행하려는 SQL문을 필요할 때마다 작성하여 실행하는 방법이다.
그래서, 일반적으로 다른 PL/SQL의 종류와는 달리 데이터베이스 내에 그정보가 저장되어 있지 않기 때문에
무명인 Anonymous PL/SQL이라고 한다.
2. Stored Procedure
CREATE PROCEDURE name ~ 문법에 의해 생성되면 생성 후 데이터베이스 내에 그 정보가 저장된다.
이러한 PL/SQL을 NAMED PL/SQL 이라고 한다.
그중에서도 STORED PROCEDURE는 개발자가 실행하려는 logic을 처리만 하고 PL/SQL 블록이 끝나는 처리흐름을 가졌다.
3. Stored Function
Stored Function은 2번에서 소개한 Stored Procedure와 동일한 개념, 동일한 기능을 가지고 있다.
한가지 차이점은 Stored Procedure는 로직을 처리만 하고 끝내지만, Stored Function은 그 처리 결과를 사용자에게 돌려준다.
4. Package
PL/SQL 언어를 통해 시스템을 개발하다 보면 수 많은 Stored Procedure, Stored Function들을 생성하게 된다.
하지만 그수가 너무 많아지면 개발자가 관리하기가 불편하고 어떤 Procedure, Function이 존재하는지 기억하기도 어려워진다.
이러한 개발환경에서 보다 효과적으로 PL/SQL 블록들을 관리하기 위해 사용되는 것이 패키지다.
보통 업무단위별로 패키지를 만들어 관리한다. 관리하기 용이하게 하기 위해 사용되어진다.
5. Trigger
트리거는 PL/SQL종류 중 가장 다양한 기능을 가지고 있다. 트리거 생성시 설정한 테이블에 대해 누군가가
UPDATE, INSERT, DELETE문을 실행하면 그작업을 실행시킨후 또는 실행시키기 전에 TRIGGER에 정의한 로직을 실행시키는
PL/SQL 블럭이다. 데이터베이스의 감시, 보안, 연속적인 오퍼레이션의 자동처리, HISTORY등등 응용할 데가 많다.
6. Object-Type
오라클 데이터베이스는 버젼 8부터 객체(Object) 옵션을 제공하고 있다.
또한 객체옵션이 제공되는 데이터베이스를 객체관계형 데이터베이스라고 한다. 이러한 객체에 대해 데이터를 입력, 수정, 삭제
조회하기 위해서는 반드시 PL/SQL 언어를 사용해야 한다.
'DB' 카테고리의 다른 글
[oracle] sys_connect_by_path() (0) | 2014.04.08 |
---|---|
테이블 insert 권한 줄때 잊지말고 시퀀스도 select 권한도 함께! (0) | 2014.04.03 |
SQL 언어의 종류 (0) | 2014.03.06 |
데이터베이스 설계단계 (0) | 2014.03.06 |
SQL 표준 개정이력 (0) | 2014.03.06 |