토토 결과는 특정 유형의 작업이 수행 될 때마다 데이터베이스가 특정 기능을 자동으로 실행 해야하는 사양입니다. 토토 결과는 테이블 (파티션 여부),보기 및 외국 테이블에 부착 할 수 있습니다.
테이블 및 외국 테이블에서 토토 결과는 전후에 실행하도록 정의 할 수 있습니다삽입
, 업데이트
또는삭제
작동, 수정 된 행당 한 번 또는 당시 한 번SQL진술.업데이트
토토 결과는 특정 열에 언급 된 경우에만 해고 될 수 있습니다set
절의 조항업데이트
진술. 토토 결과는 또한 발사 할 수 있습니다Truncate
진술. 토토 결과 이벤트가 발생하면 트리거의 기능은 이벤트를 처리하기에 적절한 시간에 호출됩니다.
보기에서 토토 결과는 대신 실행하도록 정의 할 수 있습니다삽입
, 업데이트
또는삭제
운영. 그런대신
뷰에서 수정 해야하는 각 행에 대해 토토 결과가 한 번 시작됩니다. View의 기본 기본 테이블에 필요한 수정을 수행하는 것은 토토 결과 기능의 책임이며, 적절한 경우 수정 된 행을 뷰에 표시 할 때 반환합니다. 시야 토토 결과는 또한 한 번을 한 번 실행하도록 정의 할 수 있습니다.SQL명령문, 전후삽입
, 업데이트
또는삭제
운영. 그러나 그러한 토토 결과는도있는 경우에만 해고됩니다.대신
보기에서 토토 결과. 그렇지 않으면,보기를 타겟팅하는 모든 진술은 기본베이스 테이블에 영향을 미치는 진술로 다시 작성해야하며, 해고 될 토토 결과는베이스 테이블에 첨부 된 토토 결과입니다..
토토 결과 기능은 토토 결과 자체를 생성하기 전에 정의되어야합니다. 토토 결과 함수는 인수를 취하지 않고 반환 유형을 취하는 함수로 선언해야합니다토토 결과
. (토토 결과 함수는 특수 통과를 통해 입력을 수신합니다TriggerData
일반적인 기능 인수의 형태가 아닌 구조.)
적절한 토토 결과 함수가 만들어지면 토토 결과가 설정됩니다.토토 결과 만들기. 동일한 토토 결과 기능을 여러 토토 결과에 사용할 수 있습니다.
postgresql제공per-row토토 결과 및당사자 당토토 결과. 당 방향 토토 결과를 사용하면 토토 결과 기능이 토토 결과를 발사 한 명령문의 영향을받는 각 행에 대해 한 번 호출됩니다. 대조적으로, 해당 명령문의 영향을받는 행의 수에 관계없이 적절한 명령문이 실행될 때 마당 마당 토토 결과가 한 번만 호출됩니다. 특히, 제로 행에 영향을 미치는 진술은 여전히 적용 가능한 진술 당 토토 결과를 실행하게됩니다. 이 두 가지 유형의 토토 결과는 때때로라고합니다.로드 레벨토토 결과 및명령문 수준토토 결과. 토토 결과Truncate
row가 아닌 명세서 레벨에서만 정의 될 수 있습니다.
토토 결과는 또한 화재 여부에 따라 분류됩니다전, 이후또는대신작업. 이것들은라고합니다.전
토토 결과,이후
토토 결과 및대신
토토 결과. 진술 수준전
진술이 무엇이든하기 시작하기 전에 자연스럽게 발사되는 반면, 진술 수준이후
성명서의 끝에서 발사를 토토 결과합니다. 이러한 유형의 토토 결과는 테이블, 뷰 또는 외국 테이블에 정의 될 수 있습니다. 줄 수준전
특정 행이 작동하기 직전에 발사를 토토 결과하는 반면,로드 레벨이후
진술이 끝날 때 발사를 토토 결과합니다 (그러나 진술 수준 이전이후
토토 결과). 이러한 유형의 토토 결과는 테이블과 외국 테이블에만 정의 될 수 있습니다.대신
토토 결과는 뷰에서만 줄 수준에서만 정의 될 수 있습니다. 보기의 각 행이 작동 해야하는 것으로 식별되면 즉시 발사합니다.
실행이후
토토 결과는 명세서의 끝이 아닌 거래 종료로 연기 될 수 있습니다.제약 토토 결과. 모든 경우에 토토 결과는 토토 결과와 동일한 트랜잭션의 일부로 실행되므로 진술이나 토토 결과가 오류를 일으키면 두 가지의 효과가 롤백됩니다..
상속 또는 분할 계층 구조에서 부모 테이블을 대상으로하는 진술은 영향을받는 자식 테이블의 명령문 수준 토토 결과가 해고되지 않습니다. 부모 테이블의 명세서 수준 토토 결과 만 해고됩니다. 그러나 영향을받는 어린이 테이블의 행 수준 토토 결과가 해고됩니다.
if an삽입
15521_15536충돌에 대한 업데이트
절, 행 수준의 효과가 가능합니다전
삽입
토토 결과 및로드 레벨전
업데이트
토토 결과는 업데이트 된 행의 최종 상태에서 명백한 방식으로 적용 할 수 있습니다.제외
열이 참조됩니다. 가 필요하지 않습니다.제외
두 행 수준 세트에 대한 열 참조전
실행하기위한 토토 결과. 놀라운 결과의 가능성은 둘 다있을 때 고려해야합니다전
삽입
and전
업데이트
삽입/업데이트되는 행을 변경하는로드 레벨 토토 결과 (수정이 다소 동등하지 않더라도 문제가 될 수 있습니다. 진술 수준업데이트
토토 결과가 실행될 때분쟁에서 업데이트
|업데이트
(그리고 대안에 관계없이업데이트
경로가 촬영되었습니다).삽입
with충돌에 대한 업데이트
조항은 명령문 수준을 실행합니다전
삽입
먼저 토토 결과, 문장 수준전
업데이트
Triggers, 그 다음에 이어이후
업데이트
토토 결과 및 마침내 진술 수준이후
삽입
토토 결과.
IF an업데이트
파티션 된 테이블에서 행이 다른 파티션으로 이동하게됩니다.삭제
원래 파티션에서에서삽입
새 파티션으로. 이 경우 모든 줄 수준전
업데이트
토토 결과 및 모든 연속전
삭제
원래 파티션에서 토토 결과가 발사됩니다. 그런 다음 모든 행 수준전
삽입
토토 결과는 대상 파티션에서 발사됩니다. 이 모든 토토 결과가 이동중인 행에 영향을 줄 때 놀라운 결과의 가능성을 고려해야합니다. 한행 후
토토 결과가 걱정됩니다,이후
삭제
and이후
삽입
토토 결과가 적용됩니다. 하지만이후
업데이트
토토 결과는 적용되지 않기 때문에업데이트
A로 변환되었습니다삭제
and an삽입
. 성명서 수준의 토토 결과에 관한 한,삭제
또는삽입
행 이동이 발생하더라도 토토 결과가 발사됩니다. 만업데이트
토토 결과에 사용 된 대상 테이블에 정의 된 토토 결과업데이트
성명서가 해고됩니다.
진술 당 토토 결과가 항상 반환 해야하는 토토 결과 함수NULL
. 파악 토토 결과로 호출 된 토토 결과 기능은 테이블 행을 반환 할 수 있습니다 (유형 값heappuple
) 선택한 경우 전화 집행자에게. 작업이 다음과 같은 선택을하기 전에 발사 된로드 레벨 토토 결과 :
반환 할 수 있습니다NULL
현재 행의 조작을 건너 뜁니다. 이를 통해 집행자는 토토 결과 (특정 테이블 행의 삽입, 수정 또는 삭제)를 호출 한로드 레벨 작업을 수행하지 않도록 지시합니다..
Row-Level의 경우삽입
and업데이트
토토 결과 만, 반환 된 행은 삽입 될 행이되거나 업데이트되는 행을 교체 할 행이됩니다. 이를 통해 토토 결과 기능이 삽입 또는 업데이트되는 행을 수정할 수 있습니다.
AROW-LEVEL전
이러한 동작 중 하나를 유발하지 않는 토토 결과 결과는 결과적으로 통과 된 동일한 행을 결과적으로 반환하기 위해주의해야합니다 (즉,NEW
행삽입
and업데이트
토토 결과,old
행삭제
토토 결과).
A REVEL대신
토토 결과가 반환해야합니다NULL
보기의 기본 기본 테이블에서 데이터를 수정하지 않았거나 (에 전달 된 뷰 행을 반환해야 함을 나타냅니다.NEW
행삽입
및업데이트
운영 또는old
행삭제
운영). 비 널 리턴 값은 토토 결과가 뷰에서 필요한 데이터 수정을 수행했음을 알리는 데 사용됩니다. 이로 인해 명령에 의해 영향을받는 행의 수가 증가하게됩니다. 을 위한삽입
and업데이트
운영 만 해당 토토 결과가 수정할 수 있습니다NEW
반환하기 전에 행. 이것은에 의해 반환 된 데이터를 변경합니다.반환 삽입
또는업데이트 반환
, 뷰가 제공된 것과 동일한 데이터를 정확히 표시하지 않을 때 유용합니다.
운영 후 실행 된로드 레벨 토토 결과에 대해 반환 값이 무시되므로 반환 할 수 있습니다NULL
.
일부 고려 사항은 생성 된 열에 적용됩니다.저장된 생성 열은 다음에 계산됩니다전
토토 결과 및 전이후
토토 결과. 따라서 생성 된 값은에서 검사 할 수 있습니다.이후
토토 결과. 안에전
토토 결과,old
행은 예상대로 기존 생성 된 값을 포함하지만NEW
행에는 아직 새 생성 값이 포함되어 있지 않으며 액세스해서는 안됩니다. C 언어 인터페이스 에서이 시점에서 열 내용은 정의되지 않습니다. 더 높은 수준의 프로그래밍 언어는에 저장된 생성 열에 대한 액세스를 방지해야합니다.NEW
a전
토토 결과. a에서 생성 열의 값을 변경합니다.전
토토 결과가 무시되고 덮어 쓸 것입니다.
동일한 관계에서 동일한 이벤트에 대해 둘 이상의 토토 결과가 정의되면 토토 결과는 토토 결과 이름으로 알파벳 순서로 해고됩니다. 의 경우전
and대신
토토 결과, 각 토토 결과에 의해 반환 될 수있는 수정 행은 다음 토토 결과에 대한 입력이됩니다.전
또는대신
토토 결과 리턴null
, 해당 행에 작업이 버려지고 후속 토토 결과가 해고되지 않습니다 (해당 행)
토토 결과 정의는 부울을 지정할 수 있습니다언제
조건. 토토 결과를 발사 해야하는지 확인하기 위해 테스트됩니다. 로드 레벨에서 토토 결과언제
조건은 행의 기존 및/또는 새 값을 검사 할 수 있습니다. (진술 수준 토토 결과도 가질 수 있습니다언제
조건, 특징은 그들에게 유용하지는 않지만.)에서.전
토토 결과,언제
조건은 함수가 실행되기 직전에 평가됩니다.언제
토토 결과 함수의 시작 부분에서 동일한 조건을 테스트하는 것과 실질적으로 다르지 않습니다. 그러나에서이후
토토 결과,언제
조건은 행 업데이트가 발생한 직후에 평가되며 명세서 끝에서 토토 결과를 발사하기 위해 이벤트가 대기되는지 여부를 결정합니다. 그래서이후
Trigger 's언제
조건은 TRUE를 반환하지 않으며, 이벤트를 대기하거나 성명서 끝에서 행을 다시 가져올 필요는 없습니다. 이로 인해 토토 결과가 몇 줄에 대해서만 발사되면 많은 행을 수정하는 진술에서 상당한 속도를 높일 수 있습니다.대신
토토 결과는 지원하지 않습니다언제
조건
일반적으로,로드 레벨전
토토 결과는 삽입 또는 업데이트 될 데이터를 확인하거나 수정하는 데 사용됩니다. 예를 들어, A전
토토 결과는 현재 시간을 A에 삽입하는 데 사용될 수 있습니다.타임 스탬프
열 또는 행의 두 요소가 일관되어 있는지 확인합니다. 줄 수준이후
토토 결과는 다른 테이블로 업데이트를 전파하거나 다른 테이블에 대해 일관성 검사를하는 데 가장 현명하게 사용됩니다. 이 노동 분업의 이유는 때문입니다.이후
토토 결과는 행의 최종 값이 보이는 반면 A전
토토 결과는 할 수 없습니다. 다른 것이있을 수 있습니다전
그 후 발사를 방지합니다. 방아쇠를 만들 이유가없는 경우전
또는이후
, The전
사례는 더 효율적입니다. 성명서의 끝까지 작업에 대한 정보를 저장할 필요가 없기 때문에
토토 결과 함수가 SQL 명령을 실행하면이 명령이 다시 토토 결과 될 수 있습니다. 이것은 계단식 토토 결과라고합니다. 캐스케이드 수준의 수에는 직접 제한이 없습니다. 캐스케이드는 동일한 트리거의 재귀 적 호출을 일으킬 수 있습니다. 예를 들어, an삽입
토토 결과는 추가 행을 동일한 테이블에 삽입하는 명령을 실행하여를 유발할 수 있습니다.삽입
다시 해고 될 토토 결과. 그러한 시나리오에서 무한 재귀를 피하는 것은 토토 결과 프로그래머의 책임입니다.
토토 결과가 정의되면 인수를 지정할 수 있습니다. 토토 결과 정의에 인수를 포함시키는 목적은 유사한 요구 사항을 가진 다른 토토 결과가 동일한 함수를 호출하도록 허용하는 것입니다. 예를 들어, 인수로서 두 개의 열 이름을 가져오고 현재 사용자를 하나의 현재 타임 스탬프에 넣는 일반화 된 토토 결과 함수가있을 수 있습니다. 올바르게 작성된이 토토 결과 기능은 토토 결과중인 특정 테이블과 무관합니다. 따라서 동일한 기능이 사용될 수 있습니다.삽입
예를 들어 트랜잭션 테이블에서 레코드 생성을 자동으로 추적하려면 적절한 열이있는 테이블의 이벤트. 또한로 정의 된 경우 마지막 업데이트 이벤트를 추적하는 데 사용될 수 있습니다.업데이트
토토 결과
토토 결과를 지원하는 각 프로그래밍 언어에는 토토 결과 입력 데이터를 토토 결과 기능에 사용할 수 있도록 자체 방법이 있습니다. 이 입력 데이터에는 토토 결과 이벤트 유형이 포함됩니다 (예 :삽입
또는업데이트
) 및에 나열된 인수토토 결과 만들기
. 로드 레벨 트리거의 경우 입력 데이터에도가 포함됩니다.NEW
행삽입
and업데이트
토토 결과 및/또는old
행업데이트
and삭제
토토 결과.
기본적으로 명령문 수준 토토 결과는 명세서에 의해 수정 된 개별 행을 검사 할 방법이 없습니다. 하지만이후의 명령문
토토 결과가 요청할 수 있습니다전환 테이블토토 결과에 영향을받는 행의 세트를 사용할 수 있도록 만들어집니다.행 후
토토 결과는 전환 테이블을 요청하여 테이블의 총 변경 사항과 현재 해고중인 개별 행의 변경 사항을 볼 수 있습니다. 전환 테이블을 다시 검사하는 방법은 사용중인 프로그래밍 언어에 따라 다르지만 일반적인 접근 방식은 전환 테이블이 토토 결과 기능 내에서 발행 된 SQL 명령에 의해 액세스 할 수있는 읽기 전용 임시 테이블처럼 작용하는 것입니다..
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면