이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 41.10. 메이저 토토 사이트 기능버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

23.9. 토토 베이 절차

pl/pgsql익숙해 질 수 있습니다 토토 베이 절차를 정의하십시오. 토토 베이 절차가 생성됩니다 그만큼함수 만들기함수로 명령 논쟁이없고 반환 유형의opaque. 함수는 다음과 같이 선언해야합니다 인수가 지정된 인수를받을 것으로 예상 되더라도 논쟁은 없습니다.토토 베이 만들기--- 토토 베이 인수는입니다 통과TG_ARGV11111_11136

언제pl/pgsql함수는입니다 토토 베이라고 불리는 몇 가지 특수 변수가 생성됩니다 최상위 블록에서 자동으로. 그들은 :

NEW

데이터 유형레코드; 가변 보유 삽입/업데이트 작업을위한 새 데이터베이스 행 레벨 토토 베이.

old

데이터 유형레코드; 가변 보유 연속 업데이트/삭제를위한 기존 데이터베이스 행 레벨 토토 베이.

tg_name

데이터 유형이름; 변수 실제로 해고 된 방아쇠의 이름이 포함되어 있습니다.

TG_WHEN

데이터 유형텍스트; 둘 중 하나또는이후방아쇠에 따라 정의.

tg_level

데이터 유형텍스트; 둘 중 하나Row또는진술방아쇠에 따라 정의.

TG_OP

데이터 유형텍스트; 문자열삽입, 업데이트또는삭제토토 베이가 발생했는지에 대한 정보.

TG_RELID

데이터 유형OID; 객체 ID 토토 베이 호출을 일으킨 테이블

tg_relname

데이터 유형이름; 이름의 이름 트리거 호출을 일으킨 테이블

tg_nargs

데이터 유형정수; 수 의 토토 베이 절차에 대한 인수토토 베이 만들기진술.

tg_argv []

데이터 유형 배열텍스트; 그만큼 의 논쟁토토 베이 만들기진술. 인덱스는 0에서 계산되며 표현. 유효하지 않은 인덱스 (<0 또는 = tg_nargs) 널 값을 초래합니다.

트리거 함수는 NULL 또는 레코드/행을 반환해야합니다. 테이블의 구조를 정확히 갖는 가치는 방아쇠가 해고. 발사 된 트리거는 전이 전에 NULL을 반환하여 신호를 보냅니다 이 행의 나머지 작업을 건너 뛰는 트리거 관리자 (즉, 후속 트리거는 발사되지 않았다 이 행에 삽입/업데이트/삭제가 발생하지 않습니다). 널이 아닌 경우 값이 반환 된 다음 해당 행으로 작업이 진행됩니다. 값. 행 값과 다른 행 값을 반환합니다 새로운 값의 원래 가치는 삽입 될 행을 변경하거나 업데이트. 신규에서 직접 단일 값을 대체 할 수 있습니다. 그리고 그것을 반환하거나, 완전한 새로운 레코드/행을 반품.

후 발사 된 토토 베이의 반환 값은 무시됩니다. 아마 항상 널 값을 반환하십시오. 그러나 후속 방아쇠는 할 수 있습니다 오류를 제기하여 여전히 작업을 중단합니다.

예 23-1. 에이pl/pgsql토토 베이 절차 예

이 예제 트리거는 행이 삽입 될 때마다 또는 테이블에서 업데이트 된 현재 사용자 이름과 시간은 줄에 찍혔습니다. 그리고 직원의 이름이 있는지 확인합니다 주어지고 급여는 긍정적 인 가치입니다.

테이블 emp 생성 (
    Empname 텍스트,
    급여 정수,
    last_date timestamp,
    last_user 텍스트
);

함수 만들기 emp_stamp ()는 불투명을 '반환'
    시작하다
        - empname과 월급이 주어 졌는지 확인하십시오
        새로운.EmpName ISNULL이라면
            ``Empname은 널 값이 될 수 없다 ''는 예외를 높이십시오.
        끝 IF;
        그렇다면 isnull이라면
            예외 제기 ''%는 널 급여를 가질 수 없습니다 '', new.empname;
        끝 IF;

        - 그녀가 지불해야 할 때 누가 우리를 위해 일합니까?
        새로운.salary <0이라면
            예외 제기 ''%는 부정적인 급여를 가질 수 없습니다 '', new.empname;
        끝 IF;

        - 누가 급여를 바꾸 었는지 기억하십시오
        new.last_date : = ''now '';
        new.last_user : = current_user;
        새로운 반환;
    끝;
'언어'plpgsql ';

EMP에 삽입하거나 업데이트하기 전에 Trigger Emp_stamp를 만듭니다
    각 행에 대해 Execute Procedure Emp_stamp ();