PL/Perl 언어로 함수를 생성하려면 다음을 사용하십시오. 표준 구문
함수 생성기능 이름 (인수 유형) 반환반환 유형AS '
    # PL/메이저 토토 사이트 함수 본문
' 언어 pl메이저 토토 사이트;
    PL/PerlU는 언어가 다음과 같아야 한다는 점을 제외하면 동일합니다. 다음과 같이 지정됨pl메이저 토토 사이트u.
함수 본문은 일반 메이저 토토 사이트 코드입니다. 인수
    결과는 다른 메이저 토토 사이트 서브루틴에서처럼 처리됩니다.
    인수가 전달됩니다.@_그리고
    결과 값은반환또는 함수에서 평가된 마지막 표현식으로. 에 대한
    예, 두 정수 값 중 더 큰 값을 반환하는 함수
    다음과 같이 정의할 수 있습니다.
CREATE FUNCTION perl_max (정수, 정수) RETURNS 정수 AS '
    if ($_[0]  $_[1])  return $_[0]; 
    $_[1] 반환;
' 언어 plperl;
    NULL이 함수에 전달되면 인수 값은 다음과 같이 나타납니다."정의되지 않음"펄에서. 는 위의 함수 정의는 NULL에서는 매우 잘 작동하지 않습니다. 입력(실제로는 0인 것처럼 작동합니다). 우리 추가할 수 있음WITH (isStrict)에 만들 함수 정의포스트그레SQL좀 더 합리적인 일을 하세요: NULL이 전달되면 함수는 전혀 호출되지 않습니다. 하지만 자동으로 NULL 결과를 반환합니다. 또는 다음에서 정의되지 않은 입력을 확인할 수 있습니다. 기능 본체. 예를 들어, perl_max를 원한다고 가정해 보겠습니다. 하나의 null과 하나의 null이 아닌 인수를 사용하여 null이 아닌 항목을 반환합니다. NULL이 아닌 인수:
CREATE FUNCTION perl_max (정수, 정수) RETURNS 정수 AS '
    내 ($a,$b) = @_;
    if (! 정의 $a) 
        if (! Defined $b)  return undef; 
        $b를 반환합니다;
    if (! $b를 정의함)  return $a; 
    if ($a  $b)  $a를 반환합니다. 
    $b를 반환합니다;
' 언어 plperl;
    위에 표시된 대로 PL/Perl 함수에서 NULL을 반환하려면, 정의되지 않은 값을 반환합니다. 이는 다음 여부에 관계없이 수행될 수 있습니다. 기능이 엄격한지 아닌지.
복합 유형 인수는 다음과 같이 함수에 전달됩니다. 해시에 대한 참조. 해시의 키는 속성입니다. 복합 유형의 이름. 예는 다음과 같습니다.
CREATE TABLE 직원(
    이름 텍스트,
    기본급 정수,
    보너스 정수
);
CREATE FUNCTION empcomp(employee)는 정수 AS '를 반환합니다.
    내 ($emp) = @_;
    return $emp-''basesalary'' + $emp-''bonus'';
' 언어 plperl;
SELECT 이름, empcomp(직원) FROM 직원;
    현재는 반환에 대한 지원이 없습니다. 복합형 결과 값입니다.
팁:함수 본문이 다음과 같이 전달되기 때문입니다. SQL 문자열 리터럴:만들기 기능, 작은따옴표를 이스케이프 처리해야 하며 일반적으로 메이저 토토 사이트 소스 내에서 백슬래시를 두 배로 늘립니다. 위의 예와 같이 표시됩니다. 또 다른 가능 접근 방식은 메이저 토토 사이트을 사용하여 작은따옴표를 쓰지 않는 것입니다. 확장된 인용 함수(q[], qq[], qw[]).
다음은 작동하지 않는 기능의 예입니다. 보안을 위해 파일 시스템 작업이 허용되지 않습니다 이유:
CREATE FUNCTION badfunc()는 정수 AS '를 반환합니다.
    open(TEMP, "/tmp/badfile");
    TEMP "찾았습니다!\n"을 인쇄합니다.
    1을 반환합니다.
' 언어 plperl;
    함수 생성은 성공하지만 실행 중입니다 그렇지 않을 것이다.
수퍼유저가 동일한 기능을 생성했다면 주의하세요 언어를 사용하여pl메이저 토토 사이트u, 실행 성공할 겁니다.
PL/Perl 함수의 스크립트에 제공된 인수 값 단순히 텍스트 형식으로 변환된 입력 인수입니다( SELECT 문으로 표시된 경우). 반대로,반환명령은 무엇이든 허용합니다 함수의 입력 형식으로 허용되는 문자열 반환 유형을 선언했습니다. 따라서 PL/Perl 프로그래머는 다음을 조작할 수 있습니다. 데이터 값은 마치 텍스트인 것처럼 보입니다.
Perl 기능에서 데이터베이스 자체에 접근할 수 있는 방법은 다음과 같습니다.
    실험 모듈을 통해 수행됨DBD::PgSPI(또한 사용 가능
    에서CPAN
    미러 사이트). 이 모듈은 다음을 제공합니다.DBI-호환
    이름이 지정된 데이터베이스 핸들$pg_dbh그것
    일반 쿼리를 수행하는 데 사용할 수 있습니다.DBI구문.
PL/Perl 자체는 현재 Perl을 하나만 추가로 제공합니다. 명령:
elog 레벨, msg로그 또는 오류 메시지를 내보냅니다. 가능한 수준은 다음과 같습니다.디버그, 공지및오류. 디버그그리고공지단순히 주어진 것을 방출합니다 메시지를 포스트마스터 로그에 기록하고(그리고 이를 클라이언트도 마찬가지입니다.공지). 오류오류 조건 발생: 추가 실행 기능이 중단되고 현재 트랜잭션이 중단되었습니다.
PL/Perl 함수는 서로 직접 호출할 수 없습니다. 이는 Perl 내부의 익명 서브루틴입니다. 현재는 있어요 전역 변수를 공유할 방법도 없습니다.
PL/Perl은 현재 트리거 작성에 사용할 수 없습니다. 기능.
DBD::PgSPI 또는 유사한 기능이 통합되어야 합니다. 표준포스트그레SQL배포.