PL/Perl은 로드 가능한 절차적 언어로 다음을 수행할 수 있습니다. 쓰다포스트그레SQL함수펄프로그래밍 언어.
특정 데이터베이스에 PL/Perl을 설치하려면 다음을 사용하십시오.createlang 스포츠 토토 사이트perlDB이름.
팁:언어가 설치된 경우템플릿1, 이후에 생성된 모든 데이터베이스 언어가 자동으로 설치됩니다.
참고:소스 패키지 사용자는 특별히 설치 프로세스 중에 스포츠 토토 사이트/Perl 빌드를 활성화합니다. (참조토토 캔 PostgreSQL : 문서 : 8.0 : 설치 지침더 보기 정보.) 바이너리 패키지 사용자는 PL/Perl을 다음에서 찾을 수 있습니다. 별도의 하위 패키지입니다.
PL/Perl 언어로 함수를 생성하려면 다음을 사용하십시오. 표준 구문:
함수 생성기능 이름 (인수 유형) 반환반환 유형AS $$
# PL/Perl 함수 본문
$$ 언어 plperl;
함수 본문은 일반 Perl 코드입니다.
의 구문은함수 생성명령을 사용하려면 함수 본문을 문자열로 작성해야 합니다. 일정하다. 일반적으로 달러 인용을 사용하는 것이 가장 편리합니다. (참조섹션 4.1.2.2)을 문자열 상수로 사용합니다. 사용을 선택하시면 일반 작은따옴표로 묶인 문자열 상수 구문을 사용하려면 이스케이프해야 합니다. 작은따옴표(') 및 백슬래시 (\) 함수 본문에 사용됩니다. 일반적으로 두 배로 늘립니다(참조섹션 4.1.2.1).
인수와 결과는 다른 Perl에서처럼 처리됩니다 서브루틴: 인수가 전달됩니다.@_, 결과 값은반환또는 마지막 표현으로 함수에서 평가됩니다.
예를 들어, 두 정수 중 더 큰 값을 반환하는 함수 값은 다음과 같이 정의될 수 있습니다.
CREATE FUNCTION perl_max (정수, 정수) $$로 정수를 반환합니다.
if ($_[0] $_[1]) return $_[0];
$_[1] 반환;
$$ 언어 plperl;
SQL null 값인 경우입니다
함수에 전달되면 인수 값은 다음과 같이 표시됩니다."정의되지 않음"펄에서. 위의
함수 정의는 null에서는 매우 잘 작동하지 않습니다.
입력(실제로는 0인 것처럼 작동합니다). 우리
추가할 수 있음STRICT함수에
만들 정의PostgreSQL더 합리적인 작업을 수행합니다. null 값이 전달되면
함수는 전혀 호출되지 않고 null만 반환합니다.
결과가 자동으로 표시됩니다. 또는 다음 사항을 확인할 수도 있습니다.
함수 본문에 정의되지 않은 입력이 있습니다. 예를 들어
우리가 원했던 것perl_max하나로
null이 아닌 인수를 반환하려면 null과 하나의 null이 아닌 인수를 사용하세요.
null 값이 아닌:
CREATE FUNCTION perl_max (정수, 정수) $$로 정수를 반환합니다.
내 ($a,$b) = @_;
if (! 정의 $a)
if (! Defined $b) return undef;
$b를 반환합니다;
if (! $b를 정의함) return $a;
if ($a $b) $a를 반환합니다.
$b를 반환합니다;
$$ 언어 plperl;
위에 표시된 대로 PL/Perl에서 SQL null 값을 반환하려면 함수는 정의되지 않은 값을 반환합니다. 이 작업은 다음과 같은 경우에 수행될 수 있습니다. 기능이 엄격한지 아닌지.
복합 유형 인수는 다음과 같이 함수에 전달됩니다. 해시에 대한 참조. 해시의 키는 속성입니다. 복합 유형의 이름. 예는 다음과 같습니다.
CREATE TABLE 직원(
이름 텍스트,
기본급 정수,
보너스 정수
);
CREATE FUNCTION empcomp(employee) 정수를 $$로 반환합니다.
내 ($emp) = @_;
$emp-basesalary + $emp-bonus를 반환합니다.
$$ 언어 plperl;
SELECT 이름, empcomp(employee.*) FROM 직원;
PL/Perl 함수는 다음을 사용하여 복합 유형 결과를 반환할 수 있습니다. 동일한 접근 방식: 다음을 갖는 해시에 대한 참조를 반환합니다. 필수 속성. 예를 들어,
CREATE TYPE testrowperl AS(f1 정수, f2 텍스트, f3 텍스트);
함수 생성 또는 교체 perl_row()는 testrowperl을 $$로 반환합니다.
return f2 = '안녕하세요', f1 = 1, f3 = '세계';
$$ 언어 plperl;
SELECT * FROM perl_row();
선언된 결과 데이터 유형에 포함되지 않은 모든 열 해시에 존재하는 것은 NULL로 반환됩니다.
PL/Perl 함수는 스칼라 또는 Perl 세트를 반환할 수도 있습니다. 복합 유형. 이렇게 하려면 배열에 대한 참조를 반환합니다. 스칼라 또는 해시에 대한 참조를 포함합니다. 각각. 다음은 몇 가지 간단한 예입니다.
함수 생성 또는 교체 perl_set_int(int)는 SETOF 정수를 $$로 반환합니다.
반환 [0..$_[0]];
$$ 언어 plperl;
SELECT * FROM perl_set_int(5);
함수 생성 또는 교체 perl_set()는 SETOF testrowperl을 $$로 반환합니다.
반환 [
f1 = 1, f2 = '안녕하세요', f3 = '세계' ,
f1 = 2, f2 = '안녕하세요', f3 = 'PostgreSQL' ,
f1 = 3, f2 = '안녕하세요', f3 = 'PL/Perl'
];
$$ 언어 plperl;
SELECT * FROM perl_set();
이 작업을 수행할 때 Perl은 메모리의 전체 배열; 따라서 기술은 확장되지 않습니다 매우 큰 결과 세트로.
스포츠 토토 사이트/펄현재는 그렇지 않습니다. 도메인 유형을 완벽하게 지원합니다. 도메인을 동일하게 취급합니다. 기본 스칼라 유형으로. 제약이 있다는 뜻이다. 도메인과 관련된 조치는 시행되지 않습니다. 이것은 아니다 함수 인수에 대한 문제이지만 선언하면 위험합니다. 에스포츠 토토 사이트/펄다음으로 기능 도메인 유형을 반환합니다.