PL/pgSQL다음에 사용할 수 있습니다.
롤 토토 절차를 정의합니다. 롤 토토 프로시저는 다음을 사용하여 생성됩니다.함수 생성명령으로
인수가 없고 반환 유형이 다음과 같은 함수입니다.롤 토토. 함수는 다음과 같이 선언되어야 합니다.
에 지정된 인수를 수신할 것으로 예상되는 경우에도 인수가 없습니다.롤 토토 생성--- 롤 토토 인수는 다음과 같습니다.
통과TG_ARGV, 설명대로
아래.
때PL/pgSQL함수는 롤 토토로 호출되면 여러 가지 특수 변수가 생성됩니다. 최상위 블록에서 자동으로. 그들은:
신규데이터 유형기록; 가변 보유 ROW의 INSERT/UPDATE 작업을 위한 새 데이터베이스 행 레벨 롤 토토.
오래된데이터 유형기록; 가변 보유 ROW의 UPDATE/DELETE 작업을 위한 이전 데이터베이스 행 레벨 롤 토토.
TG_NAME데이터 유형이름; 그 변수 실제로 실행된 롤 토토의 이름을 포함합니다.
TG_WHEN데이터 유형텍스트; 문자열 중 하나이전또는이후롤 토토에 따라 다름 정의.
TG_LEVEL데이터 유형텍스트; 문자열 중 하나ROW또는진술문롤 토토에 따라 다름 정의.
TG_OP데이터 유형텍스트; 문자열삽입, 업데이트또는삭제어떤 작업에 대해 롤 토토가 실행되는지 알려줍니다.
TG_RELID데이터 유형oid; 객체 ID 롤 토토 호출을 발생시킨 테이블입니다.
TG_RELNAME데이터 유형이름; 의 이름 롤 토토 호출을 발생시킨 테이블입니다.
TG_NARGS데이터 유형정수; 수 의 롤 토토 프로시저에 제공된 인수롤 토토 생성진술.
TG_ARGV[]데이터 유형 배열텍스트; 는
의 인수롤 토토 생성성명. 인덱스는 0부터 계산되며 다음과 같이 주어질 수 있습니다.
표현. 잘못된 인덱스(< 0 또는 =tg_nargs) 결과는 null 값입니다.
롤 토토 함수는 NULL 또는 레코드/행을 반환해야 합니다. 롤 토토가 발생한 테이블의 구조를 정확히 갖는 값 해고되었습니다. BEFORE에 실행된 롤 토토는 NULL을 반환하여 신호를 보낼 수 있습니다. 관리자가 이 행의 나머지 작업을 건너뛰도록 롤 토토합니다. (즉, 후속 롤 토토는 실행되지 않으며 이 행에서는 INSERT/UPDATE/DELETE가 발생하지 않습니다. NULL이 아닌 경우 값이 반환되면 해당 행에서 작업이 진행됩니다. 가치. 행 값과 다른 행 값을 반환한다는 점에 유의하세요. NEW의 원래 값은 삽입될 행을 변경하거나 업데이트되었습니다. NEW에서 단일 값을 직접 교체하는 것이 가능합니다. 이를 반환하거나 완전히 새로운 레코드/행을 작성하여 돌아오다.
AFTER 이후에 실행된 롤 토토의 반환 값은 무시됩니다. 그럴 수도 있다 또한 항상 NULL 값을 반환합니다. 그러나 AFTER 롤 토토는 여전히 오류를 발생시켜 작업을 중단합니다.
예제 19-1. 갑PL/pgSQL롤 토토 절차 예
이 예시 롤 토토는 행이 삽입될 때마다 또는 테이블에서 업데이트되면 현재 사용자 이름과 시간은 행에 스탬프가 찍혀 있습니다. 그리고 직원의 이름이 다음과 같은지 확인합니다. 주어지며 급여는 양수 값입니다.
테이블 emp 생성(
엠프 이름 텍스트,
급여 정수,
last_date 타임스탬프,
last_user 텍스트
);
CREATE FUNCTION emp_stamp ()는 '로 롤 토토를 반환합니다.
시작
-- 사원명과 급여가 입력되었는지 확인하세요.
NEW.empname이 ISNULL인 경우
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();