토토 캔 절차는 pl/tcl에서 작성할 수 있습니다.PostgreSQL토토 캔로 호출되는 절차는 인수가없고 반환 유형의 함수로 선언되어야합니다토토 캔.
토토 캔 관리자의 정보는 다음 변수에서 절차 본문에 전달됩니다.
The Trigger의 이름토토 캔 만들기진술.
토토 캔 절차가 호출 된 테이블의 객체 ID.
토토 캔 절차가 호출 된 테이블의 이름.
토토 캔 절차가 호출 된 테이블의 스키마.
빈 목록 요소로 접두사가 붙은 테이블 열 이름의 tcl 목록. 그래서 목록에서 열 이름을 찾고tcl'slsearch
명령은 첫 번째 열에 대해 1로 시작하는 요소 번호를 반환합니다.PostgreSQL11697_11857
문자열전, 이후또는대신12031_12074
문자열Row또는성명서토토 캔 이벤트 유형에 따라
문자열삽입, 업데이트, 삭제또는Truncate토토 캔 이벤트 유형에 따라
새 테이블 행의 값을 포함하는 연관 배열삽입또는업데이트동작 또는 비어삭제. 배열은 열 이름으로 색인됩니다. 널 인 열은 배열에 나타나지 않습니다. 이것은 명세서 수준 토토 캔에 대해 설정되지 않았습니다.
오래된 테이블 행의 값을 포함하는 연관 배열업데이트또는삭제동작 또는 비어삽입. 배열은 열 이름으로 색인됩니다. 널 인 열은 배열에 나타나지 않습니다. 이것은 명세서 수준 토토 캔에 대해 설정되지 않았습니다.
a TCl에 주어진 절차에 대한 인수 목록토토 캔 만들기진술. 이러한 주장은 또한로 액세스 할 수 있습니다.$ 1 ... $n절차 기관에서.
토토 캔 절차의 리턴 값은 문자열 중 하나 일 수 있습니다OK또는건너 뛰기또는 열 이름/값 쌍의 목록. 반환 값이 인 경우OK, 작동 (삽입/업데이트/삭제) 방아쇠를 해고 한 것은 정상적으로 진행됩니다.skip토토 캔 관리자 에게이 행의 작업을 조용히 억제하도록 지시합니다. 목록이 반환되면 PL/TCL에 수정 된 행을 토토 캔 관리자에게 반환하도록 지시합니다. 수정 된 행의 내용은 목록의 열 이름과 값으로 지정됩니다. 목록에 언급되지 않은 열은 null로 설정됩니다. 수정 된 행을 반환하는 것은 줄 수준에만 의미가 있습니다전 삽입또는업데이트토토 캔, 수정 된 행이 삽입되는 대신 삽입됩니다$ new; 또는 줄 수준대신 삽입또는업데이트반환 된 행이 소스 데이터로 사용되는 토토 캔리턴 삽입또는반환 업데이트조항. 로드 레벨전 삭제또는대신 삭제토토 캔, 수정 된 행을 반환하는 것은 반환과 같은 효과를냅니다OK, 이는 작업이 진행됩니다. 토토 캔 리턴 값은 다른 모든 유형의 토토 캔에 대해 무시됩니다.
팁 :결과 목록은 수정 된 튜플의 배열 표현에서배열 gettcl 명령.
여기 테이블의 정수 값을 강제하여 행에서 수행되는 업데이트 수를 추적하는 작은 예제 토토 캔 절차가 있습니다. 삽입 된 새 행의 경우 값이 0으로 초기화 된 다음 모든 업데이트 작업마다 증가합니다.
함수 만들기 trigfunc_modcount ()는 토토 캔를 $$로 반환합니다 스위치 $ tg_op 삽입 새 ($ 1) 0을 설정하십시오 업데이트 새로 설정 ($ 1) $ old ($ 1) 새로운 새로운 ($ 1) 기본 OK를 반환합니다 반환 [배열이 새로워지기] $$ 언어 pltcl; 테이블 마이 타브 생성 (Num Integer, Description Text, Modcnt Integer); mytab에 삽입하거나 업데이트하기 전에 trigger trig_mytab_modcount를 만듭니다 각 행마다 실행 절차 trigfunc_modcount ( 'modcnt');
토토 캔 절차 자체가 열 이름을 모른다는 것을 알 수 있습니다. 그것은 토토 캔 인수에서 제공됩니다. 이렇게하면 토토 캔 절차를 다른 테이블과 함께 재사용 할 수 있습니다.