42.6. PL/토토 베이의 트리거 기능#

트리거 기능은 PL/토토 베이로 작성될 수 있습니다.PostgreSQL트리거로 호출될 함수는 인수가 없고 반환 유형이 다음과 같은 함수로 선언되어야 합니다.트리거.

트리거 관리자의 정보는 다음 변수를 통해 함수 본문에 전달됩니다.

$TG_name

다음의 트리거 이름트리거 생성진술.

$TG_relid

트리거 함수를 호출한 테이블의 개체 ID.

$TG_table_name

트리거 함수를 호출한 테이블의 이름.

$TG_table_schema

트리거 함수가 호출되도록 만든 테이블의 스키마.

$TG_relatts

빈 목록 요소가 앞에 붙은 테이블 열 이름의 토토 베이 목록입니다. 따라서 다음을 사용하여 목록에서 열 이름을 검색합니다.토토 베이'slsearch명령은 관례적으로 열에 번호를 매기는 방식과 마찬가지로 첫 번째 열에 대해 1부터 시작하는 요소 번호를 반환합니다.PostgreSQL. (빈 목록 요소는 삭제된 열 위치에도 나타나므로 오른쪽 열의 속성 번호 매기기가 정확합니다.)

$TG_when

문자열이전, 이후또는대신, 트리거 이벤트 유형에 따라 다름.

$TG_level

문자열ROW또는진술문트리거 이벤트 유형에 따라 다릅니다.

$TG_op

문자열삽입, 업데이트, 삭제, 또는잘라내기트리거 이벤트 유형에 따라 다릅니다.

$NEW

다음에 대한 새 테이블 행의 값을 포함하는 연관 배열삽입또는업데이트작업 또는 비어 있음삭제. 배열은 열 이름으로 인덱싱됩니다. null인 열은 배열에 표시되지 않습니다. 명령문 수준 트리거에는 설정되지 않습니다.

$OLD

다음에 대한 이전 테이블 행의 값을 포함하는 연관 배열업데이트또는삭제작업 또는 비어 있음삽입. 배열은 열 이름으로 인덱싱됩니다. null인 열은 배열에 표시되지 않습니다. 명령문 수준 트리거에는 설정되지 않습니다.

$args

다음에 주어진 함수에 대한 인수의 토토 베이 목록트리거 생성성명. 이러한 인수는 다음과 같이 액세스할 수도 있습니다.$1 ... $n함수 본문에서.

트리거 함수의 반환 값은 문자열 중 하나일 수 있습니다.확인또는건너뛰기또는 열 이름/값 쌍 목록입니다. 반환 값이 다음과 같은 경우확인, 연산(삽입/업데이트/삭제14838_14888건너뛰기트리거 관리자에게 이 행에 대한 작업을 자동으로 억제하도록 지시합니다. 목록이 반환되면 PL/토토 베이에게 수정된 행을 트리거 관리자에게 반환하도록 지시합니다. 수정된 행의 내용은 목록의 열 이름과 값으로 지정됩니다. 목록에 언급되지 않은 모든 열은 null로 설정됩니다. 수정된 행 반환은 행 수준에서만 의미가 있습니다.이전 삽입또는업데이트트리거, 여기에 제공된 행 대신 수정된 행이 삽입됩니다.$NEW; 또는 행 수준의 경우대신 삽입또는업데이트반환된 행이 소스 데이터로 사용되는 트리거반환 삽입또는업데이트 반환 중절. 행 수준에서이전 삭제또는대신 삭제트리거, 수정된 행 반환은 반환과 동일한 효과가 있습니다.확인즉, 작업이 진행됩니다. 다른 모든 유형의 트리거에서는 트리거 반환 값이 무시됩니다.

결과 목록은 다음을 사용하여 수정된 튜플의 배열 표현으로 만들 수 있습니다.배열 가져오기토토 베이 명령입니다.

다음은 행에서 수행되는 업데이트 수를 추적하기 위해 테이블의 정수 값을 강제로 적용하는 트리거 함수의 간단한 예입니다. 새 행이 삽입되면 값은 0으로 초기화된 다음 모든 업데이트 작업에서 증가됩니다.

CREATE FUNCTION trigfunc_modcount() $$로 트리거를 반환합니다.
    $TG_op 전환 
        삽입 
            신규 설정($1) 0

        업데이트 
            새로운 설정($1) $OLD($1)
            신규($1) 증가

        기본값 
            반품 확인

    반환 [배열 새로 가져오기]
$$ 언어 pltcl;

CREATE TABLE mytab(숫자 정수, 설명 텍스트, modcnt 정수);

mytab에 삽입하거나 업데이트하기 전에 트리거 trig_mytab_modcount를 생성하세요.
    각 행에 대해 함수 실행 trigfunc_modcount('modcnt');

트리거 기능 자체는 열 이름을 알지 못합니다. 이는 트리거 인수에서 제공됩니다. 이렇게 하면 트리거 함수를 다른 테이블에서 재사용할 수 있습니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.