이 장에서는 글쓰기에 대한 일반적인 정보를 제공합니다 와이즈 토토 기능. 와이즈 토토 기능은 대부분의 경우 작성할 수 있습니다 를 포함한 사용 가능한 절차 언어pl/pgsql(토토 베이 : 문서 : 8.1 : PL/PGSQL -SQL 절차 언어),PL/TCL(37 장),pl/perl(PostgreSQL : 문서 : 8.1 : PL/윈 토토 -윈 토토 절차 언어) 및pl/python(39 장). 이 장을 읽은 후에 좋아하는 절차 언어는 장을 참조해야합니다 와이즈 토토 작성의 언어 별 세부 사항을 찾으려면 그것.
C에서 와이즈 토토 함수를 작성하는 것도 가능합니다. 대부분의 사람들은 절차 중 하나를 사용하기가 더 쉽다는 것을 알게됩니다. 언어. 현재 방아쇠를 작성하는 것은 불가능합니다 일반 SQL 기능 언어에서 기능.
와이즈 토토는 데이터베이스가 해야하는 사양입니다 특정 기능이 특정 기능을 자동으로 실행합니다 작동 유형이 수행됩니다. 와이즈 토토를 정의 할 수 있습니다 전후에 실행삽입, 업데이트또는삭제운영, 한 번만 수정 된 행 또는 당시SQL진술. 와이즈 토토 이벤트가 발생하면 방아쇠의 기능은 적절한 시간에 호출됩니다. 이벤트 처리.
와이즈 토토 함수는 와이즈 토토 전에 정의되어야합니다 그 자체가 만들 수 있습니다. 와이즈 토토 함수는 다음과 같이 선언해야합니다 인수가없고 유형을 반환하는 함수와이즈 토토. (와이즈 토토 함수는 그것의 와이즈 토토 기능을받습니다 특수 통과를 통한 입력TriggerData구조, 형태가 아닙니다 일반 기능 인수.)
일단 적절한 와이즈 토토 함수가 생성되면 와이즈 토토는로 설정되었습니다.와이즈 토토 만들기. 같은 와이즈 토토 기능은 여러 와이즈 토토에 사용할 수 있습니다.
PostgreSQL제공per-row와이즈 토토 및진술 당와이즈 토토. 당직 방향 와이즈 토토와 함께 와이즈 토토 함수는 각 행에 대해 한 번 호출됩니다. 방아쇠를 해고 한 진술의 영향을받습니다. 대조적으로, 진료 당 와이즈 토토는 AN 일 때 한 번만 호출됩니다 수에 관계없이 적절한 진술이 실행됩니다 그 진술의 영향을받는 줄. 특히 진술 0 행에 영향을 미치는 것은 여전히 실행됩니다. 적용 가능한 진료 당 와이즈 토토. 이 두 가지 유형 와이즈 토토는 때때로라고합니다.로드 레벨와이즈 토토 및명령문 수준각각 와이즈 토토.
와이즈 토토는 또한로 분류됩니다.전와이즈 토토 및이후와이즈 토토. 와이즈 토토 전 성명서 수준 성명서가 무엇이든하기 시작하기 전에 자연스럽게 발사 맨 끝에 발사를 유발 한 후 진술 수준 진술. 와이즈 토토가 즉시 발사되기 전에로드 레벨 특정 행이 작동하기 전에, 행은 성명서의 끝에서 불을 피우는 (그러나 와이즈 토토 후 명령문 수준).
진료 당 와이즈 토토로 호출 된 와이즈 토토 함수 항상 반환NULL. 와이즈 토토 기능 당면 와이즈 토토로 호출하면 테이블 행 (값의 값 유형Heappuple) 호출 그들이 선택한 경우 집행자. 행 앞에서 발사 된 행 수준 와이즈 토토 운영에는 다음과 같은 선택이 있습니다.
반환 할 수 있습니다NULL현재 행 작동. 이것은 집행자에게 지시합니다 호출 한 로우 레벨 작업을 수행하지 않습니다 와이즈 토토 (특정의 삽입 또는 수정 테이블 행).
Row-Level의 경우삽입and업데이트와이즈 토토 전용, 반환 행은 삽입 될 행이되거나 교체 할 행이됩니다. 행이 업데이트 중입니다. 이를 통해 와이즈 토토 기능이 가능합니다 삽입 또는 업데이트중인 행을 수정합니다.
이러한 행동 중 하나는 결과와 동일한 행을 전달한 결과 (즉,NEW행삽입and업데이트와이즈 토토,old행삭제와이즈 토토).
로드 레벨 와이즈 토토에 대한 반환 값은 무시됩니다 수술 후에, 그래서 그들은 돌아올 수 있습니다NULL.
동일한 이벤트에 대해 둘 이상의 와이즈 토토가 정의 된 경우 같은 관계에서, 와이즈 토토는 알파벳순으로 발사됩니다. 와이즈 토토 이름으로 주문하십시오. 와이즈 토토 이전의 경우 각 와이즈 토토에 의해 반환 된 수정 행은 다음 와이즈 토토에 입력. 와이즈 토토가 돌아 오기 전의 경우null, 작업이 버려집니다 그 행과 그 이후의 와이즈 토토는 해고되지 않았습니다.
일반적으로 와이즈 토토가 선택되기 전의 행은 OR을 확인합니다 삽입 또는 업데이트 될 데이터 수정. 을 위한 예를 들어, 전 와이즈 토토가 전류를 삽입하는 데 사용될 수 있습니다. A 로의 시간타임 스탬프열 또는 확인 행의 두 요소는 일관성이 있습니다. 와이즈 토토 후 행 업데이트를 다른 사람으로 전파하는 데 가장 현명하게 사용됩니다. 테이블 또는 다른 테이블에 대해 일관성 검사를합니다. 그만큼 이 노동 분업에 대한 이유는 줄의 최종 값을보고있는 동안 방아쇠가되기 전에; 와이즈 토토 전에 다른 것이있을 수 있습니다 그것 후 발사. 당신이 구체적인 이유가 없다면 전과 후의 와이즈 토토, 이전 케이스가 더 효율적입니다. 작업에 대한 정보는 성명서가 끝날 때까지 저장.
와이즈 토토 함수가 SQL 명령을 실행하면 이들은 이들입니다 명령은 다시 와이즈 토토를 발사 할 수 있습니다. 이것은 계단식이라고합니다 와이즈 토토. 수에 직접 제한이 없습니다 캐스케이드 레벨. 캐스케이드가 a를 유발할 수 있습니다 동일한 트리거의 재귀 호출; 예를 들어, an삽입와이즈 토토가 명령을 실행할 수 있습니다 추가 행을 동일한 테이블에 삽입하여를 유발합니다.삽입다시 해고 될 와이즈 토토. 그것 무한을 피하려는 와이즈 토토 프로그래머의 책임입니다 그러한 시나리오에서의 재귀.
와이즈 토토가 정의되면 인수를 지정할 수 있습니다. 그것을 위해.목적 와이즈 토토 정의에 인수를 포함하는 것은 허용하는 것입니다 동일하게 호출하기 위해 비슷한 요구 사항을 가진 다른 와이즈 토토 기능. 예를 들어, 일반화 된 방아쇠가있을 수 있습니다 인수로서 두 개의 열 이름을 가져 오는 기능 하나의 현재 사용자와 현재 시간 스탬프 다른. 올바르게 작성하면이 와이즈 토토 기능이 있습니다 특정 테이블과 무관하게 와이즈 토토됩니다. 그래서 동일한 기능을 사용할 수 있습니다삽입적절한 열이있는 테이블의 이벤트, 자동으로 예를 들어 트랜잭션 테이블에서 레코드 생성을 추적합니다. 또한 정의 된 경우 마지막 업데이트 이벤트를 추적하는 데 사용될 수 있습니다.업데이트와이즈 토토
와이즈 토토를 지원하는 각 프로그래밍 언어에는 자체가 있습니다 와이즈 토토 입력 데이터를 와이즈 토토 기능. 이 입력 데이터에는 와이즈 토토 유형이 포함됩니다 이벤트 (예 :삽입또는업데이트)뿐만 아니라 주장도 마찬가지입니다 에 나열됨와이즈 토토 만들기. a 로드 레벨 와이즈 토토, 입력 데이터에는도 포함됩니다.NEW행삽입and업데이트와이즈 토토 및/또는old행업데이트and삭제와이즈 토토. 진술 수준 와이즈 토토는 현재 진술에 의해 수정 된 개별 행.