pl/pgsql익숙해 질 수 있습니다
롤 토토 절차를 정의하십시오. 롤 토토 절차가 생성됩니다
그만큼함수 만들기인수가없는 기능 및 반환 유형롤 토토. 함수는 다음과 같이 선언해야합니다
인수가 지정된 인수를받을 것으로 예상 되더라도 논쟁은 없습니다.롤 토토 만들기--- 롤 토토 인수는입니다
통과TG_ARGV
11236_11261
언제pl/pgsql함수는입니다 롤 토토라고 불리는 몇 가지 특수 변수가 생성됩니다 최상위 블록에서 자동으로. 그들은 :
NEW
데이터 유형레코드; 가변 보유 삽입/업데이트 작업을위한 새 데이터베이스 행 레벨 롤 토토.
old
데이터 유형레코드; 가변 보유 연속 업데이트/삭제를위한 기존 데이터베이스 행 레벨 롤 토토.
tg_name
데이터 유형이름; 변수 실제로 해고 된 방아쇠의 이름이 포함되어 있습니다.
TG_WHEN
데이터 유형텍스트; 둘 중 하나전또는이후방아쇠에 따라 정의.
tg_level
데이터 유형텍스트; 둘 중 하나Row또는진술방아쇠에 따라 정의.
TG_OP
데이터 유형텍스트; 문자열삽입, 업데이트또는삭제롤 토토가 발생하는 작업이 발생한 작업을 알려줍니다.
TG_RELID
데이터 유형OID; 객체 ID 롤 토토 호출을 일으킨 테이블
tg_relname
데이터 유형이름; 이름의 이름 롤 토토 호출을 일으킨 테이블
tg_nargs
데이터 유형Integer; 수 의 롤 토토 절차에 대한 인수롤 토토 만들기진술.
tg_argv []
데이터 유형 배열텍스트; 그만큼
의 논쟁롤 토토 만들기진술. 인덱스는 0에서 계산되며
표현. 유효하지 않은 인덱스 (<0 또는 =tg_nargs
) null 값을 초래합니다.
롤 토토 함수는 null 또는 레코드/행을 반환해야합니다. 테이블의 구조를 정확히 갖는 가치는 방아쇠가 해고. 발사 된 롤 토토는 전이 전에 NULL을 반환하여 신호를 보냅니다 이 행의 나머지 작업을 건너 뛰는 롤 토토 관리자 (즉, 후속 롤 토토는 발사되지 않았다 이 행에 삽입/업데이트/삭제가 발생하지 않습니다). 널이 아닌 경우 값이 반환 된 다음 해당 행으로 작업이 진행됩니다. 값. 행 값과 다른 행 값을 반환합니다 새로운 값의 원래 가치는 삽입 될 행을 변경하거나 업데이트. 신규에서 직접 단일 값을 대체 할 수 있습니다. 그리고 그것을 반환하거나, 완전한 새로운 레코드/행을 반품.
후 발사 된 트리거의 반환 값은 무시됩니다. 아마 항상 널 값을 반환하십시오. 그러나 후속 방아쇠는 할 수 있습니다 오류를 제기하여 여전히 작업을 중단합니다.
예 19-1. 에이pl/pgsql롤 토토 절차 예
이 예제 롤 토토는 행이 삽입 될 때마다 또는 테이블에서 업데이트 된 현재 사용자 이름과 시간은 줄에 찍혔습니다. 그리고 직원의 이름이 있는지 확인합니다 주어지고 급여는 긍정적 인 가치입니다.
테이블 emp 생성 ( Empname 텍스트, 급여 정수, last_date timestamp, last_user 텍스트 ); 함수 만들기 emp_stamp () 롤 토토를 반환합니다. 시작하다 - empname과 월급이 주어 졌는지 확인하십시오 새로운.EmpName ISNULL이라면 ``Empname은 널 값이 될 수 없다 ''는 예외를 높이십시오. 끝 IF; 그렇다면 isnull이라면 예외 제기 ''%는 널 급여를 가질 수 없습니다 '', new.empname; 끝 IF; - 그녀가 지불해야 할 때 누가 우리를 위해 일합니까? 새로운.salary <0이라면 예외 제기 ''%는 부정적인 급여를 가질 수 없습니다 '', new.empname; 끝 IF; - 누가 급여를 바꾸 었는지 기억하십시오 new.last_date : = ''now ''; new.last_user : = current_user; 새로운 반환; 끝; '언어'plpgsql '; EMP에 삽입하거나 업데이트하기 전에 Trigger Emp_stamp를 만듭니다 각 행에 대해 Execute Procedure Emp_stamp ();