이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 사설 토토 작성버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

토토 베이 만들기

이름

토토 베이 작성 - 새 토토 베이을 정의
토토 베이 만들기이름as이벤트to개체[where조건]
    [대신] [Action| 아무것도 아님 ]

입력

이름

생성 규칙의 이름.

이벤트

이벤트는 중 하나입니다.select, 업데이트, 삭제또는삽입.

개체

개체는테이블또는테이블..

조건

조항의 모든 SQL.NEW또는현재대신 나타날 수 있습니다 인스턴스 변수 인스턴스 변수가있을 때마다 변수 SQL에서 허용됩니다.

Action

모든 SQL 문.NEW또는현재대신 나타날 수 있습니다 인스턴스 변수 인스턴스 변수가있을 때마다 변수 SQL에서 허용됩니다.

출력

Create

토토 베이이 성공적으로 있으면 메시지가 반환되었습니다 생성.

설명

규칙의 의미론은 당시에 개인이 인스턴스에 액세스, 업데이트, 삽입 또는 삭제됩니다. 현재 인스턴스 (검색, 업데이트 및 삭제) 및 새로운 인스턴스 (업데이트 및 추가). 인 경우이벤트on 절 및에 지정 됨조건어디에 지정되었습니다 조항은 현재 인스턴스에 대해 true입니다.Action규칙의 일부가 실행됩니다. 첫 번째, 그러나 현재 인스턴스 및/또는 새 인스턴스가 대체됩니다현재.Attribute-NameandNew.Attribute-Name.

theAction토토 베이의 일부 동일한 명령 및 트랜잭션 식별자와 함께 활성화를 일으킨 사용자 명령.

노트

SQL 규칙에 대한주의가 순서대로 진행됩니다. 같은 클래스 인 경우 이름 또는 인스턴스 변수에 나타납니다.이벤트, The조건and theAction토토 베이의 일부, 그것들은 모두입니다 다른 튜플 변수로 간주됩니다. 더 정확하게NEWand현재는 유일한 튜플 변수입니다 이 조항들 사이에서 공유. 예를 들어, 다음 두 가지 규칙은 동일한 의미를 가지고 있습니다.

emp.salary on emp.name = "joe"에 대한 업데이트
    emp (...)를 업데이트하십시오 ...
EMP-1에 대한 업데이트.
    EMP-3 (...) Where ... 업데이트하십시오.
각 토토 베이은 대신 선택적 태그를 가질 수 있습니다. 이것없이 꼬리표,Action사용자 명령에 추가이벤트in조건규칙의 일부가 발생합니다. 또는Action부품이 대신 수행됩니다 사용자 명령. 이 후에Action키워드가 될 수 있습니다아무것도.

다시 쓰기 토토 베이 시스템을 선택할 때 특정 토토 베이 응용 프로그램의 경우, 다시 쓰기에서 기억하십시오. 체계,현재관계를 나타냅니다 인스턴스 시스템에서는 인스턴스 (튜플).

재 작성 규칙 시스템을 주목하는 것이 매우 중요합니다. 원형 규칙을 감지하거나 처리하지 않습니다. 예를 들어, 다음 두 규칙 정의가 각각 허용되지만 에 의해Postgres, 검색 명령은 원인Postgresto 충돌:

예 14-1. 원형 재 작성의 예 토토 베이 조합.

규칙 작성 bad_rule_combination_1 as
    emp에 eMp
    대신 toyemp로 선택하십시오;
규칙 작성 bad_rule_combination_2 as
    Toyemp에 선택하십시오
    대신 emp로 선택하십시오;

EMP에서 검색하려는이 시도Postgres충돌로.

선택 * From Emp;

당신은 클래스에 대한 토토 베이 정의에 액세스해야합니다. 그것에 대한 토토 베이을 정의하십시오. 사용grantRevoke권한 변경.

usage

Sam을 Joe와 동일한 급여 조정을 받게 만들 수 있습니다 :

규칙 example_1을 만듭니다
    업데이트 emp.salary where current.name = "joe"
    EMP 업데이트 (SANARY = NEW.SALARY)
    여기서 emp.name = "Sam";
Joe가 급여 조정을받을 때 이벤트는 True와 Joe의 현재 인스턴스가되고 새로운 인스턴스가 제안되었습니다. 실행 루틴에 사용할 수 있습니다. 그러므로 그의 새로운 급여는입니다 이후 규칙의 행동 부분으로 대체 된 실행. 이것은 Joe의 급여를 Sam에게 전파합니다.

Bill이 접근 할 때 Joe의 급여를 받기 위해 :

토토 베이 example_2를 만듭니다
    emp.salary에 선택하십시오
    where current.name = "bill"
    대신하십시오
    Emp에서 (Emp.Salary)를 선택하십시오
        여기서 emp.name = "Joe";

신발에있는 직원의 급여에 대한 Joe 액세스 거부 부서 (current_user반환합니다 현재 사용자의 이름) :

규칙 example_3을 만듭니다
    emp.salary에 선택하십시오
    where current.dept = "신발"및 current_user = "joe"
    대신 아무것도하지 말라;

장난감에서 일하는 직원의 전망 만들기 부서.

Toyemp 만들기 (이름 = char16, Salary = int4);

규칙 example_4를 만듭니다
    Toyemp에 선택하십시오
    대신하십시오
    Emp에서 (Emp.Name, Emp.Salary)를 선택하십시오
        여기서 emp.dept = "장난감";

모든 신입 사원은 5,000 명 이하를 만들어야합니다

규칙 example_5를 만듭니다
    새로 불활성으로 불활성
    뉴스 세트 급여를 업데이트하십시오 = 5000;

버그

aSQL토토 베이은 할 수 없습니다 배열 참조가되고 매개 변수를 가질 수 없습니다.

"OID"필드를 제외하고는 시스템 속성이 될 수 없습니다 토토 베이의 어느 곳에서나 참조되었습니다. 무엇보다도 이것은 의미합니다 인스턴스의 기능 (예 : "foo (emp)"여기서"emp"IS 클래스)는 토토 베이의 어느 곳에서나 전화 할 수 없습니다.

토토 베이 시스템은 토토 베이 텍스트 및 쿼리 계획을 텍스트로 저장합니다. 속성. 이것은 토토 베이의 생성이 실패 할 수 있음을 의미합니다. 토토 베이과 다양한 내부 표현이 일부 가치를 초과합니다 그것은 한 페이지 (8kb)의 순서입니다.

호환성

토토 베이 만들기진술은Postgres언어 확장.

SQL92

없음토토 베이 만들기성명서SQL92.