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

19.9. 롤 토토 절차

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

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

NEW

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

old

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

tg_name

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

TG_WHEN

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

tg_level

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

TG_OP

데이터 유형텍스트; 문자열삽입, 업데이트또는삭제롤 토토가 발생하는 작업이 발생한 작업을 알려줍니다.

TG_RELID

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

tg_relname

데이터 유형이름; 이름의 이름 롤 토토 호출을 일으킨 테이블

tg_nargs

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

tg_argv []

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

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

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

예 19-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 ();