젠 토토는 특정 유형의 작업이 수행될 때마다 데이터베이스가 자동으로 특정 기능을 실행해야 한다는 사양입니다. 젠 토토는 테이블(파티셔닝 여부와 상관없이), 뷰, 외부 테이블에 연결할 수 있습니다.
테이블 및 외부 테이블에서 젠 토토는 이전 또는 이후에 실행되도록 정의할 수 있습니다.삽입, 업데이트또는삭제작업, 수정된 행당 한 번 또는 행당 한 번SQL진술.업데이트또한 특정 열이 언급된 경우에만 젠 토토가 실행되도록 설정할 수 있습니다.SET의 절업데이트성명. 젠 토토는 다음에 대해 실행될 수도 있습니다.잘라내기문장. 젠 토토 이벤트가 발생하면 이벤트를 처리하기 위해 적절한 시간에 젠 토토 함수가 호출됩니다.
뷰에서는 대신 실행되도록 젠 토토를 정의할 수 있습니다.삽입, 업데이트, 또는삭제작업. 그런대신젠 토토는 보기에서 수정해야 하는 각 행에 대해 한 번씩 실행됩니다. 뷰의 기본 테이블에 필요한 수정을 수행하고, 적절한 경우 뷰에 표시될 수정된 행을 반환하는 것은 젠 토토 기능의 책임입니다. 뷰에 대한 젠 토토는 1회당 한 번씩 실행되도록 정의할 수도 있습니다.SQL문, 이전 또는 이후삽입, 업데이트, 또는삭제작업. 그러나 이러한 젠 토토는 다음이 있는 경우에만 실행됩니다.대신뷰를 젠 토토합니다. 그렇지 않으면 뷰를 대상으로 하는 모든 명령문은 기본 기본 테이블에 영향을 미치는 명령문으로 다시 작성되어야 하며, 그러면 실행될 젠 토토는 기본 테이블에 연결된 젠 토토입니다.
젠 토토 자체가 생성되기 전에 젠 토토 기능을 정의해야 합니다. 젠 토토 함수는 인수를 사용하지 않고 유형을 반환하는 함수로 선언되어야 합니다.젠 토토. (젠 토토 함수는 특별히 전달된 메소드를 통해 입력을 받습니다.젠 토토데이터구조, 일반적인 함수 인수 형식이 아닙니다.)
적절한 젠 토토 기능이 생성되면 젠 토토는 다음을 사용하여 설정됩니다.젠 토토 생성. 여러 젠 토토에 동일한 젠 토토 기능을 사용할 수 있습니다.
포스트그레SQL둘 다 제공행당젠 토토 및문별젠 토토. 행별 젠 토토를 사용하면 젠 토토 함수는 젠 토토를 실행한 문에 의해 영향을 받는 각 행에 대해 한 번씩 호출됩니다. 대조적으로, 명령문별 젠 토토는 해당 명령문의 영향을 받는 행 수에 관계없이 적절한 명령문이 실행될 때 한 번만 호출됩니다. 특히, 0개의 행에 영향을 미치는 명령문은 여전히 적용 가능한 명령문별 젠 토토를 실행하게 됩니다. 이 두 가지 유형의 젠 토토를 때때로 호출합니다.행 수준젠 토토 및문 수준각각 젠 토토됩니다. 젠 토토 대상:잘라내기행별이 아닌 명령문 수준에서만 정의할 수 있습니다.
젠 토토는 실행 여부에 따라 분류됩니다.이전, 이후또는대신에작업. 이를 다음과 같이 지칭합니다.이전젠 토토,이후젠 토토 및대신각각 젠 토토됩니다. 명령문 수준이전문이 작업을 시작하기 전에 자연스럽게 젠 토토되는 반면, 문 수준이후문의 끝부분에서 실행을 유발합니다. 이러한 유형의 젠 토토는 테이블, 뷰 또는 외부 테이블에 정의될 수 있습니다. 행 수준이전특정 행이 작업되기 직전에 실행을 젠 토토하는 반면, 행 수준이후문의 끝에서 젠 토토가 실행됩니다(그러나 문 수준 이전이후젠 토토). 이러한 유형의 젠 토토는 뷰가 아닌 파티션을 나누지 않은 테이블과 외부 테이블에서만 정의할 수 있습니다.대신젠 토토는 뷰에서만 정의할 수 있으며 행 수준에서만 정의할 수 있습니다. 뷰의 각 행이 작업이 필요한 것으로 식별되면 즉시 실행됩니다.
상속 또는 분할 계층의 상위 테이블을 대상으로 하는 명령문은 영향을 받는 하위 테이블의 명령문 수준 젠 토토를 실행시키지 않습니다. 상위 테이블의 명령문 수준 젠 토토만 실행됩니다. 그러나 영향을 받은 하위 테이블의 행 수준 젠 토토는 실행됩니다.
만일삽입포함충돌 시 업데이트를 하세요절, 행 수준의 효과가 가능함이전 삽입젠 토토 및 행 수준이전 업데이트젠 토토는 둘 다 업데이트된 행의 최종 상태에서 분명한 방식으로 적용될 수 있습니다.제외됨열이 참조되었습니다. 반드시 있을 필요는 없습니다.제외됨두 행 수준 세트에 대한 열 참조이전15869_15981이전 삽입그리고이전 업데이트삽입/업데이트되는 행을 변경하는 행 수준 젠 토토(수정 사항이 다소 동일하더라도 멱등성이 아닌 경우 문제가 될 수 있음). 명령문 수준에 유의하세요.업데이트젠 토토가 실행되는 경우충돌 시 업데이트를 하세요행이 영향을 받았는지 여부에 관계없이 지정됩니다.업데이트(대안 여부에 관계없이업데이트경로를 사용한 적이 있습니다). 안삽입그리고충돌 시 업데이트를 하세요절은 명령문 수준을 실행합니다이전 삽입먼저 젠 토토한 다음 명령문 수준이전 업데이트젠 토토, 이어서 명령문 수준이후 업데이트젠 토토 및 마지막으로 명령문 수준이후 삽입젠 토토.
문별 젠 토토에 의해 호출된 젠 토토 함수는 항상 반환되어야 합니다.NULL. 행별 젠 토토에 의해 호출된 젠 토토 함수는 테이블 행(유형의 값)을 반환할 수 있습니다.힙튜플)을 호출 실행자에게 전달합니다(선택한 경우). 작업 전에 실행되는 행 수준 젠 토토에는 다음 선택 사항이 있습니다.
돌아올 수 있습니다.NULL현재 행에 대한 작업을 건너뜁니다. 이는 젠 토토를 호출한 행 수준 작업(특정 테이블 행의 삽입, 수정 또는 삭제)을 수행하지 않도록 실행자에게 지시합니다.
행 수준의 경우삽입그리고업데이트젠 토토만, 반환된 행은 업데이트되는 행을 삽입하거나 대체할 행이 됩니다. 이를 통해 젠 토토 함수가 삽입되거나 업데이트되는 행을 수정할 수 있습니다.
행 수준이전이러한 동작 중 하나를 발생시키려는 의도가 없는 젠 토토는 전달된 것과 동일한 행(즉,신규행삽입그리고업데이트젠 토토,오래된행삭제젠 토토).
행 수준대신젠 토토는 둘 중 하나를 반환해야 합니다.NULL뷰의 기본 기본 테이블에서 데이터를 수정하지 않았거나 전달된 뷰 행을 반환해야 함을 나타냅니다(신규행삽입그리고업데이트작업 또는오래된행삭제작업). Null이 아닌 반환 값은 젠 토토가 뷰에서 필요한 데이터 수정을 수행했음을 알리는 데 사용됩니다. 이렇게 하면 명령의 영향을 받는 행 수가 증가합니다. 을 위한삽입그리고업데이트작업 전용, 젠 토토는 다음을 수정할 수 있습니다.신규행을 반환하기 전에. 그러면 반환된 데이터가 변경됩니다.반환 삽입또는업데이트 반환 중, 제공된 데이터와 정확히 동일한 데이터가 뷰에 표시되지 않을 때 유용합니다.
작업 후에 실행된 행 수준 젠 토토의 경우 반환 값이 무시되므로 반환할 수 있습니다.NULL.
동일한 관계의 동일한 이벤트에 대해 둘 이상의 젠 토토가 정의된 경우 젠 토토는 젠 토토 이름에 따라 알파벳 순서로 실행됩니다. 의 경우이전및대신젠 토토, 각 젠 토토에서 반환된 수정 가능성이 있는 행은 다음 젠 토토의 입력이 됩니다. 있다면이전또는대신젠 토토 반환NULL, 해당 행에 대한 작업이 중단되고 해당 행에 대한 후속 젠 토토가 실행되지 않습니다.
젠 토토 정의는 부울을 지정할 수도 있습니다.언제조건, 젠 토토가 실행되어야 하는지 확인하기 위해 테스트됩니다. 행 수준에서 젠 토토는언제조건은 행 열의 이전 및/또는 새 값을 검사할 수 있습니다. (문 수준 젠 토토도 다음을 가질 수 있습니다.언제조건이지만 이 기능은 그다지 유용하지 않습니다.) a이전젠 토토, 그언제조건은 함수가 실행되거나 실행되기 직전에 평가되므로 다음을 사용합니다.언제은 젠 토토 기능 시작 시 동일한 조건을 테스트하는 것과 크게 다르지 않습니다. 그러나,이후젠 토토, 그언제조건은 행 업데이트가 발생한 직후 평가되며 명령문 끝에서 젠 토토를 실행하기 위해 이벤트가 대기열에 있는지 여부를 결정합니다. 그래서 언제이후젠 토토의언제조건이 true를 반환하지 않으면 이벤트를 대기열에 넣거나 명령문 끝에서 행을 다시 가져올 필요가 없습니다. 이로 인해 젠 토토가 일부 행에 대해서만 실행되어야 하는 경우 많은 행을 수정하는 문의 속도가 크게 향상될 수 있습니다.대신젠 토토는 지원하지 않습니다.언제조건.
일반적으로 행 수준이전젠 토토는 삽입되거나 업데이트될 데이터를 확인하거나 수정하는 데 사용됩니다. 예를 들어,이전젠 토토는 현재 시간을 a에 삽입하는 데 사용될 수 있습니다.타임스탬프열 또는 행의 두 요소가 일치하는지 확인합니다. 행 수준이후젠 토토는 업데이트를 다른 테이블에 전파하거나 다른 테이블에 대해 일관성을 검사하는 데 가장 현명하게 사용됩니다. 이러한 노동 분업의 이유는 다음과 같습니다.이후젠 토토는 행의 최종 값을 보고 있음을 확신할 수 있지만 a이전젠 토토를 실행할 수 없습니다. 다른 것이 있을 수도 있습니다이전그 이후에 실행이 시작됩니다. 젠 토토를 할 특별한 이유가 없는 경우이전또는이후, 그이전case가 더 효율적입니다. 작업에 대한 정보는 명령문이 끝날 때까지 저장할 필요가 없기 때문입니다.
젠 토토 함수가 SQL 명령을 실행하는 경우 이러한 명령은 젠 토토를 다시 실행할 수 있습니다. 이를 계단식 젠 토토라고 합니다. 캐스케이드 레벨 수에는 직접적인 제한이 없습니다. 계단식 배열로 인해 동일한 젠 토토가 재귀적으로 호출될 수 있습니다. 예를 들어,삽입젠 토토는 동일한 테이블에 추가 행을 삽입하는 명령을 실행할 수 있으며, 이로 인해삽입젠 토토가 다시 실행됩니다. 이러한 시나리오에서 무한 재귀를 방지하는 것은 젠 토토 프로그래머의 책임입니다.
젠 토토가 정의될 때 이에 대한 인수를 지정할 수 있습니다. 젠 토토 정의에 인수를 포함하는 목적은 유사한 요구 사항을 가진 다양한 젠 토토가 동일한 함수를 호출할 수 있도록 하는 것입니다. 예를 들어, 두 개의 열 이름을 인수로 사용하고 현재 사용자를 하나에 배치하고 현재 타임스탬프를 다른 하나에 배치하는 일반화된 젠 토토 함수가 있을 수 있습니다. 올바르게 작성되면 이 젠 토토 함수는 젠 토토되는 특정 테이블과 독립적입니다. 따라서 동일한 기능을 사용할 수 있습니다.삽입적절한 열이 있는 테이블의 이벤트를 사용하여 예를 들어 트랜잭션 테이블의 레코드 생성을 자동으로 추적합니다. 또한 다음과 같이 정의된 경우 마지막 업데이트 이벤트를 추적하는 데 사용할 수도 있습니다.업데이트젠 토토.
젠 토토를 지원하는 각 프로그래밍 언어에는 젠 토토 기능에 사용할 수 있는 젠 토토 입력 데이터를 만드는 고유한 방법이 있습니다. 이 입력 데이터에는 젠 토토 이벤트 유형이 포함됩니다(예:삽입또는업데이트) 및 다음에 나열된 모든 인수젠 토토 생성. 행 수준 젠 토토의 경우 입력 데이터에는 다음도 포함됩니다.신규행삽입그리고업데이트젠 토토 및/또는오래된행업데이트그리고삭제젠 토토.
기본적으로 명령문 수준 젠 토토에는 명령문에 의해 수정된 개별 행을 검사할 수 있는 방법이 없습니다. 하지만명령문 이후젠 토토가 요청할 수 있음전환 테이블영향을 받은 행 세트를 젠 토토에 사용할 수 있도록 생성됩니다.행 이후젠 토토는 또한 테이블의 전체 변경 사항은 물론 현재 실행 중인 개별 행의 변경 사항도 볼 수 있도록 전환 테이블을 요청할 수 있습니다. 전이 테이블을 다시 검사하는 방법은 사용 중인 프로그래밍 언어에 따라 다르지만 일반적인 접근 방식은 전이 테이블이 젠 토토 함수 내에서 실행된 SQL 명령으로 액세스할 수 있는 읽기 전용 임시 테이블처럼 작동하도록 만드는 것입니다.