다음은 PL/pgSQL이 얼마나 쉬운지 보여주는 몇 가지 기능입니다. 함수를 작성할 수 있습니다. 더 복잡한 예를 보려면 프로그래머 PL/pgSQL에 대한 회귀 테스트를 살펴볼 수도 있습니다.
젠 토토/pgSQL에서 함수 작성에 대한 한 가지 고통스러운 세부 사항은 작은따옴표 처리. CREATE의 함수 소스 텍스트 FUNCTION은 리터럴 문자열이어야 합니다. 리터럴 내부의 작은따옴표 문자열은 두 배로 묶거나 백슬래시로 묶어야 합니다. 우리는 여전히 우아한 대안을 찾고 있습니다. 그 사이 두배로 늘었다 아래 예와 같은 단일 인용문을 사용해야 합니다. 모두 이에 대한 솔루션은 향후 버전에서 제공됩니다.포스트그레스상위 버전과 호환됩니다.
다음 두 PL/pgSQL 함수는 해당 함수와 동일합니다. C 언어 함수 토론의 대응 부분입니다.
CREATE FUNCTION add_one (int4)는 int4 AS '를 반환합니다.
시작
$1 + 1을 반환합니다.
끝;
' 언어 '젠 토토pgsql';
CREATE FUNCTION concat_text (text, text) 텍스트를 '로 반환합니다.
시작
1달러를 돌려주세요 || $2;
끝;
' 언어 '젠 토토pgsql';
다시 말하면 The C의 예와 동일한 젠 토토/pgSQL입니다. 기능.
CREATE FUNCTION c_overpaid (EMP, int4) RETURNS bool AS '
선언
$1에 대한 emprec 별칭;
살림 별칭 $2;
시작
IF emprec.salary ISNULL 그러면
''f''를 반환합니다.
종료하면;
RETURN emprec.salary sallim;
끝;
' 언어 '젠 토토pgsql';
이 트리거는 행이 삽입되거나 업데이트될 때마다 보장합니다. 테이블에는 현재 사용자 이름과 시간이 표시됩니다. 행. 그리고 직원의 이름이 제공되고 급여는 양수 값입니다.
테이블 emp 생성(
엠프 이름 텍스트,
급여 int4,
last_date 날짜시간,
last_사용자 이름);
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 := getpgusername();
새로운 반품;
끝;
' 언어 '젠 토토pgsql';
emp를 삽입하거나 업데이트하기 전에 emp_stamp 트리거를 생성하세요.
각 행 실행 절차 emp_stamp();