프로그래밍.../PostgreSQL | Posted by 고기킬러 2009. 12. 22. 15:38

PL/pgSQL이란?

  • PL/pgSQL이란? 

 Postgres 6.3 버젼 부터 PostgreSQL은 Procedural Language(PL)를 지원하기 시작했다. 이것은 PostgreSQL만의 특별한 경우로서 oracle 의 PL/SQL과 비유될 수 있는 기능으로 다음의 특징 혹은 기능을 가지고 있다.

1. PL/pgSQL 은 function 이나 trigger procedure 를 만드는데 사용되어 질 수 있다.
2. SQL 문에 제어 구조를 추가할 수 있다.
3. 복잡한 계산을 구현할 수 있다.
4. user가 정의한 Type, Function, Operation을 상속할 수 있다.
5. 사용하기 쉽다.
6. PL/PythonPL/TCL과 같은 프로시져 언어를 지원한다.

 여섯 번째의  PL/Python과 PL/TCL은 각각 Python이라는 언어와 TCL이라는 언어를 사용하여 프로시져 함수를 사용할 수 있는 언어로 PL/Python과 PL/TCL에 대해서 더 자세히 알고 싶다면 PostgreSQL 사이트의 도규멘테이션을 살펴보길 바란다. 여기에서는 PL/pgSQL에 국한해서 설명하겠당.

PL/pgSQL는 블록 지향 언어이다. 블록는 다음처럼 사용된다.

[ Label ]
[ DECLARE declarations ]
BEGIN
      statements
END;

위의 형태가 가장 기초되는 형태이며 이 statements안에는 또 다른 서브 블록이 들어 올 수 있으면 이 서브 블록안의 변수는 들은 외부 블록으로부터 숨기기 위해 사용될 수 있다. 즉 외부에서는 서브 블록 내의 변수를 알 수가 없다. 이를 설명하기 전에 먼저 변수의 선언에 대해서 알아보자.

  • 변수 선언

PL/pgSQL에서의 변수 선언은 'DECLARE' 부분에서 선언되고 초기화되는데 그 초기값을 줄 수 있고, 해당 블럭을 진입할 때마다 초기화 된다. 다음은 변수 선언의 예이다.

CREATE FUNCTION func() RETURNS INTEGER AS '
DECLARE
   quantity INTEGER := 30;
BEGIN
   RAISE NOTICE ''Quantity here is %'',quantity;  -- quantity = 30
   quantity := 50;
   --
   -- 하위-블럭의 생성
   --
   DECLARE
      quantity INTEGER := 80;
   BEGIN
      RAISE NOTICE ''Quantity here is %'',quantity;  -- quantity = 80
   END;

   RAISE NOTICE ''Quantity here is %'',quantity;  -- quantity = 50
END;
' LANGUAGE 'plpgsql';

이처럼 변수의 선언 DECLARE 부분에서만 선언이 되어지는 것을 알 수 있다. 또 위에서 말한 것처럼 서브 블록에 대해서 외부 블록에서는 관여를 하지 않는다. 그리고 참고로 주석문을 처리하기 위해서 사용하는 것은 2종류가 있는데 위에서 사용하고 있는 --와 /* */ 이렇게 2종류가 사용된다. 그리고 변수의 선언에서 변수의 타입은 데이터 베이스가 지원하는 모든 타입을 사용할 수 있으며 다음의 문법에 맞게 사용된다.

변수이름 [ CONSTANT ] 변수형 [ NOT NULL ] [ { DEFAULT | := } 값 ];

초기화되지 않은 변수는 자동으로 NULL이 할당되기 때문에  NOT NULL로 선언된 변수는 필히 초기화를 해주어야 한다. 다음은 몇가지 변수 선언 예이다.

darkill NUMBER(5);
query INTEGER := 32;
url varchar := ''http://mysite.com'';
user_no CONSTANT INTEGER := 10;