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