PL/pgSQL다음에 사용할 수 있습니다. 토토 핫 절차를 정의합니다. 토토 핫 프로시저는 다음을 사용하여 생성됩니다.함수 생성명령, 선언 인수가 없고 반환 유형이인 함수입니다.토토 핫. 기능은 다음과 같아야합니다. 수신할 것으로 예상되는 경우에도 인수 없이 선언됩니다. 에 지정된 인수토토 핫 생성--- 토토 핫 인수는 다음을 통해 전달됩니다.TG_ARGV, 아래 설명대로.
때PL/pgSQL함수는 토토 핫로 호출되면 여러 가지 특수 변수가 생성됩니다. 최상위 블록에서 자동으로. 그들은:
데이터 유형기록; 가변 보유 에 대한 새 데이터베이스 행삽입/업데이트행 수준 토토 핫의 작업. 이 변수는 null입니다. 명령문 수준 토토 핫.
데이터 유형기록; 가변 보유 에 대한 이전 데이터베이스 행업데이트/삭제행 수준 토토 핫의 작업. 이 변수는 null입니다. 명령문 수준 토토 핫.
데이터 유형이름; 그 변수 실제로 실행된 토토 핫의 이름을 포함합니다.
데이터 유형텍스트; 문자열 중 하나이전또는이후토토 핫에 따라 다름 정의.
데이터 유형텍스트; 문자열 중 하나ROW또는진술문토토 핫에 따라 다름 정의.
데이터 유형텍스트; 문자열삽입, 업데이트또는삭제어떤 작업에 대해 토토 핫가 실행되었는지 알려줍니다.
데이터 유형oid; 객체 ID 토토 핫 호출을 발생시킨 테이블입니다.
데이터 유형이름; 의 이름 토토 핫 호출을 발생시킨 테이블입니다.
데이터 유형정수; 수 의 토토 핫 프로시저에 제공된 인수토토 핫 생성성명.
데이터 유형 배열텍스트; 는 의 인수토토 핫 생성성명. 인덱스는 0부터 계산됩니다. 잘못된 인덱스(이하 0보다 크거나 같음tg_nargs) 결과는 null 값입니다.
토토 핫 함수는 null 또는 레코드/행을 반환해야 합니다. 토토 핫가 발생한 테이블의 구조를 정확히 갖는 값 해고되었습니다.
행 수준 토토 핫가 실행됨이전5월 null을 반환하여 토토 핫 관리자에게 나머지 부분을 건너뛰도록 신호를 보냅니다. 이 행에 대한 작업(즉, 후속 토토 핫가 실행되지 않습니다. 그리고삽입/업데이트/삭제하지 않습니다 이 행에 대해 발생합니다). Null이 아닌 값이 반환되면 작업은 해당 행 값으로 진행됩니다. 행 값 반환 원래 값과 다릅니다.신규삽입되거나 업데이트될 행을 변경합니다(그러나 직접적인 효과삭제사례). 받는 사람 저장할 행을 변경하면 단일 대체가 가능합니다. 값을 직접신규그리고 다음을 반환합니다. 수정됨신규, 또는 완전히 새로운 것을 구축하려면 반환할 레코드/행.
a의 반환 값이전또는이후문 수준 토토 핫 또는이후행 수준 토토 핫는 항상 무시됨; null일 수도 있습니다. 그러나 이러한 유형의 토토 핫는 여전히 전체 작업을 중단할 수 있습니다. 오류.
예 37-1토토 핫 절차의 예를 보여줍니다.PL/pgSQL.
예 37-1. 갑PL/pgSQL토토 핫 절차
이 예시 토토 핫는 행이 삽입될 때마다 또는 테이블에서 업데이트되면 현재 사용자 이름과 시간은 행에 스탬프가 찍혀 있습니다. 그리고 직원의 이름이 다음과 같은지 확인합니다. 주어지며 급여는 양수 값입니다.
테이블 emp 생성(
엠프 이름 텍스트,
급여 정수,
last_date 타임스탬프,
last_user 텍스트
);
CREATE FUNCTION emp_stamp()는 토토 핫 AS '를 반환합니다.
시작
-- 사원명과 급여가 입력되었는지 확인하세요.
NEW.empname이 NULL인 경우
RAISE EXCEPTION ''empname은 null일 수 없습니다.'';
종료하면;
NEW.salary가 NULL인 경우
RAISE EXCEPTION ''%는 null 급여를 가질 수 없습니다'', NEW.empname;
종료하면;
-- 그녀가 비용을 지불해야 하는데 누가 우리를 위해 일합니까?
NEW.salary < 0이면
RAISE EXEPTION ''%는 음수 급여를 가질 수 없습니다'', NEW.empname;
종료하면;
-- 언제 급여를 변경했는지 기억해 보세요.
NEW.last_date := ''지금'';
NEW.last_user := 현재_사용자;
새로운 반품;
끝;
' 언어 plpgsql;
emp를 삽입하거나 업데이트하기 전에 emp_stamp 토토 핫를 생성하세요.
각 행 실행 절차 emp_stamp();