블록에 사용 된 모든 변수, 행 및 레코드는 블록의 토토 베이 섹션에서 토토 베이되었습니다. (유일한 예외는 루프 반복에 대한 루프 변수입니다. 정수 값의 범위는 자동으로 정수로 토토 베이됩니다. 변하기 쉬운.)
pl/pgsql변수가 가질 수 있습니다 와 같은 모든 SQL 데이터 유형정수, varcharandchar.
변수 선언의 몇 가지 예는 다음과 같습니다.
user_id 정수; 수량 숫자 (5); url varchar;
변수 선언의 일반적인 구문은 다음과 같습니다.
이름[Constant]type[NOT NULL] [기본값 | : =표현 ];
기본 조항은 주어진 경우 초기 값을 지정합니다 블록이 입력 될 때 변수에 할당됩니다. 만약 기본 조항이 제공되지 않으면 변수가 초기화됩니다. 그만큼SQLNULL 값.
상수 옵션은 변수가 할당되는 것을 방지합니다 그 값이 계속 일정하게 유지되도록 차단하다. NULL이 지정되지 않으면 NULL 값의 할당 런타임 오류가 발생합니다. 모든 변수는 null이 아닌 것으로 토토 베이되었습니다 널 비 널 기본값이 지정되어 있어야합니다.
기본값은 블록이있을 때마다 평가됩니다. 입력. 예를 들어 ' 할당now' 유형 변수타임 스탬프변수가 시간을 갖도록합니다 함수가 사전 컴파일 된 경우가 아니라 현재 함수 호출.
예 :
수량 정수 기본값 32; url varchar : = ''http://mysite.com ''; user_id 상수 정수 : = 10;
이름별칭$ n;
함수로 전달 된 매개 변수는 식별자$ 1, $ 2등. 선택적으로, 별명을 토토 베이 할 수 있습니다$ n증가 된 매개 변수 이름 가독성. 별칭 또는 숫자 식별자가 할 수 있습니다 그런 다음 매개 변수 값을 참조하는 데 사용됩니다. 일부 예 :
함수 생성 _tax (real)는 Real을 다시 반환합니다. 선언하다 1 달러에 대한 소계 별칭; 시작하다 반환 하위 토탈 * 0.06; 끝; '언어'plpgsql '; 기능 악기 생성 (Varchar, Integer)은 정수를 '로 반환합니다. 선언하다 $ 1에 대한 v_string 별칭; $ 2의 색인 별칭; 시작하다 - 여기에 일부 계산 끝; '언어'plpgsql ';
이름 TableName%RowType;
복합 유형의 변수를 a라고합니다.Row변수 (또는RowType변수). 이러한 변수는 a 선택 또는 쿼리 결과의 전체 행 쿼리의 열 세트는 변수의 토토 베이 된 유형과 일치합니다. 행 값의 개별 필드는 일반적인 도트 표기법, 예를 들어Rowvar.field.
현재, 행 변수는를 사용 하여만 토토 베이 할 수 있습니다%RowType표기법; 그러나 하나도 베어 테이블 이름이 유형 선언으로 작동 할 것으로 예상됩니다. 내에서 받아 들여지지 않을 것입니다pl/pgsql기능.
함수의 매개 변수는 복합 유형 일 수 있습니다 (완료 테이블 행). 이 경우 해당 식별자 $ n이됩니다 행 변수가되면 필드를 선택할 수 있습니다. 예$ 1.user_id.
테이블 행의 사용자 정의 속성 만 있습니다 OID 또는 기타 시스템이 아닌 RowType 변수에서 액세스 가능 속성 (행은보기에서 나올 수 있기 때문에). 필드 RowType의 테이블의 필드 크기 또는 정밀 와 같은 데이터 유형char (n).
이름레코드;
레코드 변수는 rowtype 변수와 유사하지만 그것들은 그것들입니다 사전 정의 된 구조가 없습니다. 그들은 실제 행을 취합니다 선택 중 또는 명령. 레코드 변수의 하위 구조는 각각을 변경할 수 있습니다 시간이 지정됩니다. 이것의 결과는 a 레코드 변수가 먼저 할당됩니다.하위 구조 및 필드에 액세스하려고 시도하면 런타임 오류가 발생합니다.
참고레코드는 사실이 아닙니다 데이터 유형, 자리 표시 자만. 예를 들어, 할 수는 없습니다 기능 반환 토토 베이레코드.
사용%유형and%RowType속성, 변수를 선언 할 수 있습니다 다른 데이터베이스 항목과 동일한 데이터 유형 또는 구조 (예 : 테이블 필드).
%유형데이터 유형을 제공합니다 변수 또는 데이터베이스 열. 이것을 사용할 수 있습니다 데이터베이스 값을 유지하는 변수를 선언합니다. 을 위한 예를 들어,라는 열이 있다고 가정 해 봅시다.user_idin사용자테이블. 동일한 데이터 유형의 변수를 토토 베이하려면사용자.user_id당신은 다음 :
user_id users.user_id%유형;
사용하여%유형당신은 필요하지 않습니다 참조하는 구조의 데이터 유형을 알고 있습니다. 그리고 가장 중요한 것은 참조 된 데이터 유형이 향후 항목 변경 (예 : 테이블 변경 정수에서 real 로의 user_id의 정의), 당신은 기능 정의를 변경해야합니다.
%RowType복합재를 제공합니다 지정된 전체 행에 해당하는 데이터 유형 테이블.테이블기존 테이블 또는 데이터베이스의 이름.
선언 users_rec user%rowtype; user_id user.user_id%유형; 시작하다 user_id : = user_rec.user_id; ... 함수 만들기 do_view_exist (정수) bool을 반환합니다. 선언하다 $ 1의 주요 별칭; table_data cs_materialized_views%rowtype; 시작하다 cs_materialized_views에서 table_data *로 선택하십시오 여기서 sort_key = 키; 찾을 수없는 경우 거짓을 반환합니다. 끝 IF; 진실을 반환하십시오. 끝; '언어'plpgsql ';
RenameOldNametoNewName;
이름 바꾸기 선언을 사용하여 이름을 변경할 수 있습니다. 변수, 레코드 또는 행. 이것은 주로 새롭거나 오래된 경우 유용합니다 트리거 내부의 다른 이름으로 참조해야합니다 절차. alias 참조.
예 :
us user_id로 이름을 바꿉니다. this_var를 that_var로 바꾸십시오.
참고 :이름 바꾸기가 깨진 것 같습니다 Postgresql 7.2. 이를 고정하는 것은 별명이므로 우선 순위가 낮습니다 실용적인 이름의 실질적인 용도를 다룹니다.