블록에서 사용되는 모든 변수는 블록의 DECLARE
안에 선언되어야 합니다. PL/pgSQL의 변수는 integer
, varchar
, char
와 같은 임의의 SQL 데이터 타입을 가질 수 있으며 예시는 다음과 같습니다.
user_id int;
quantity numeric(5);
url text;
myrow 테이블이름 % ROWTYPE;
myfield 테이블이름.컬럼이름 % TYPE;
arow RECORD;
변수 선언의 일반 구문은 다음과 같습니다.
name [ CONSTANT ] 자료형 [ COLLATE collation이름 ] [ NOT NULL ] [ { DEFAULT | := | = } expression ];
변수 선언 시 DEFAULT
키워드로 블록이 시작될 때 변수에 할당된 초기 값을 지정할 수 있습니다. 만약 변수에 DEFAULT
키워드가 없는 경우 해당 변수는 NULL
로 초기화됩니다. 변수의 기본값은 해당 블록이 시작될 때마다 계산되어 변수에 할당됩니다. 예를 들어, timestamp
유형의 변수에 now()
를 기본값으로 지정하면, 함수가 컴파일된 시간이 아니라 현재 함수 호출 시간이 변수에 저장됩니다. DEFAULT
키워드 대신 :=
나 =
도 사용할 수 있습니다.
CONSTANT
키워드가 붙은 변수는 변수 초기화 후에 변수가 다시 할당되는 것을 방지해 해당 값이 블록이 끝날 때까지 일정하게 유지됩니다.
만약 변수에 NOT NULL
키워드가 붙었는데 런타임 시 NULL
값이 할당되면 오류가 발생합니다 NOT NULL
로 선언된 모든 변수는 NULL
이 아닌 기본값을 지정해야 합니다.
일반적인 변수 선언 예시는 다음과 같습니다.
quantity integer DEFAULT 32;
url varchar := 'http://mysite.com';
user_id CONSTANT integer := 10;