pl/pgsql익숙해 질 수 있습니다 토토 핫 절차를 정의하십시오. 토토 핫 절차가 생성됩니다 그만큼함수 만들기명령, 선언 인수가없는 함수와 반환 유형의 함수토토 핫. 함수는 있어야합니다 받을 것으로 예상 되더라도 논쟁없이 선언 지정된 인수토토 핫 만들기--- 토토 핫 인수가 통과됩니다TG_ARGV, 아래 설명 된대로.
언제pl/pgsql함수는입니다 토토 핫라고 불리는 몇 가지 특수 변수가 생성됩니다 최상위 블록에서 자동으로. 그들은 :
데이터 유형레코드; 가변 보유 새로운 데이터베이스 행삽입/업데이트행 수준 토토 핫의 작동. 이 변수는 NULL입니다 진술 수준 토토 핫.
데이터 유형레코드; 가변 보유 기존 데이터베이스 행업데이트/삭제행 수준 토토 핫의 작동. 이 변수는 NULL입니다 진술 수준 토토 핫.
데이터 유형이름; 변수 실제로 해고 된 방아쇠의 이름이 포함되어 있습니다.
데이터 유형텍스트; 둘 중 하나전또는이후방아쇠에 따라 정의.
데이터 유형텍스트; 둘 중 하나Row또는성명서방아쇠에 따라 정의.
데이터 유형텍스트; 문자열삽입, 업데이트또는삭제토토 핫가 발생한 작업이 발생했는지 알려줍니다.
데이터 유형OID; 객체 ID 토토 핫 호출을 일으킨 테이블
데이터 유형이름; 이름의 이름 토토 핫 호출을 일으킨 테이블
데이터 유형Integer; 수 의 토토 핫 절차에 대한 인수토토 핫 만들기진술.
데이터 유형 배열텍스트; 그만큼 의 논쟁토토 핫 만들기진술. 인덱스는 0. 유효하지 않은 인덱스에서 카운트합니다 (덜 0 이상 또는보다tg_nargs) null 값을 초래합니다.
토토 핫 함수는 NULL 또는 레코드/행을 반환해야합니다. 테이블의 구조를 정확히 갖는 가치는 방아쇠가 해고.
로드 레벨 토토 핫 발사전5 월 NULL을 반환하여 토토 핫 관리자에게 나머지 부분을 건너 뛰도록 신호를 보냅니다. 이 행의 작업 (즉, 후속 토토 핫가 발사되지 않음 그리고삽입/업데이트/삭제그렇지 않습니다 이 행에 발생합니다). unnull 값이 반환되면 작업은 해당 행 값을 진행합니다. 행 값을 반환합니다 원래 값과 다르NEW삽입 또는 업데이트 될 행을 변경합니다 (그러나 의 직접적인 효과삭제케이스). 에게 저장할 행을 변경하면 단일을 교체 할 수 있습니다. 직접 값NEW수정NEW또는 완전한 새로운 것을 건설합니다 레코드/행 반환.
A의 반환 값전또는이후명령문 수준 토토 핫 또는 an이후로우 레벨 토토 핫는 항상입니다 무시; 그것은 널가 될 수도 있습니다. 그러나 이러한 유형 중 하나 토토 핫는 여전히 전체 작업을 중단 할 수 있습니다. 오류.
예 37-1토토 핫 절차의 예를 보여줍니다pl/pgsql.
예 37-1. 에이pl/pgsql토토 핫 프로 시저
이 예제 토토 핫는 행이 삽입 될 때마다 또는 테이블에서 업데이트 된 현재 사용자 이름과 시간은 줄에 찍혔습니다. 그리고 직원의 이름이 있는지 확인합니다 주어지고 급여는 긍정적 인 가치입니다.
테이블 emp 생성 ( Empname 텍스트, 급여 정수, last_date timestamp, last_user 텍스트 ); 함수 만들기 emp_stamp () 토토 핫를 반환합니다. 시작하다 - empname과 월급이 주어 졌는지 확인하십시오 new.empname이 null이라면 그렇다면 ``empname은 null '' ''예외를 높이십시오. 끝 IF; New.salary가 null이라면 예외 제기 ''%는 널 급여를 가질 수 없습니다 '', 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 ();