PL/Perl은 로드 가능한 절차적 언어로 다음을 수행할 수 있습니다. 쓰다포스트그레SQL함수 그만큼펄 프로그래밍 언어.
PL/Perl 사용의 일반적인 이점은 다음과 같은 사용이 가능하다는 것입니다. 여러 가지의 저장된 함수 내에서"문자열 녹이기"연산자 및 기능 사용 가능 펄의 경우. 윈 토토을 사용하면 복잡한 문자열을 구문 분석하는 것이 더 쉬울 수 있습니다. 문자열 함수와 제어 구조보다 PL/pgsql에서 제공됩니다.
특정 데이터베이스에 PL/Perl을 설치하려면 다음을 사용하십시오.createlang pl윈 토토db이름.
팁:언어가 설치된 경우템플릿1, 이후에 생성된 모든 데이터베이스 언어가 자동으로 설치됩니다.
참고:소스 패키지 사용자는 특별히 설치 프로세스 중에 PL/윈 토토 빌드를 활성화합니다. (참조PostgreSQL : 문서 : 8.1 : 토토 사이트 순위 지침더 보기 정보.) 바이너리 패키지 사용자는 PL/Perl을 다음에서 찾을 수 있습니다. 별도의 하위 패키지입니다.
PL/Perl 언어로 함수를 생성하려면 다음을 사용하십시오. 기준PostgreSQL : 문서 : 8.1 : 토토 사이트 순위 만들기구문:
함수 생성기능 이름 (인수 유형) 반환반환 유형AS $$
# PL/윈 토토 함수 본문
$$ 언어 pl윈 토토;
함수 본문은 일반 윈 토토 코드입니다. 실제로, PL/윈 토토 글루 코드는 이를 윈 토토 서브루틴 내부에 래핑합니다. PL/펄 함수는 항상 스칼라 값을 반환해야 합니다. 더 많이 돌려받을 수 있어요 복잡한 구조(배열, 레코드 및 세트)를 반환하여 아래에 설명된 대로 참조하세요. 목록을 반환하지 마세요.
참고:이름이 지정된 중첩 서브루틴을 사용하는 방법은 다음과 같습니다. Perl에서는 위험합니다. 특히 어휘를 참조하는 경우 더욱 그렇습니다. 둘러싸는 범위의 변수. 왜냐하면 PL/Perl 함수는 서브루틴으로 래핑됩니다. 이름이 지정된 모든 서브루틴 당신이 만드는 것은 중첩될 것입니다. 일반적으로 다음이 훨씬 안전합니다. coderef를 통해 호출하는 익명 서브루틴을 만듭니다. 참조윈 토토diag자세한 내용은 매뉴얼 페이지 세부.
의 구문은함수 생성명령을 사용하려면 함수 본문을 문자열로 작성해야 합니다. 끊임없는. 일반적으로 달러 인용을 사용하는 것이 가장 편리합니다. (보다섹션 4.1.2.2)를 문자열 상수로 사용합니다. 사용을 선택하시면 일반 작은따옴표로 묶인 문자열 상수 구문을 사용하려면 이스케이프해야 합니다. 작은따옴표(') 및 백슬래시 (\) 함수 본문에 사용됩니다. 일반적으로 두 배로 늘립니다(참조섹션 4.1.2.1).
인수와 결과는 다른 윈 토토에서처럼 처리됩니다 서브루틴: 인수가 전달됩니다.@_, 결과 값은반환또는 마지막 표현으로 함수에서 평가됩니다.
예를 들어, 두 정수 중 더 큰 값을 반환하는 함수 값은 다음과 같이 정의될 수 있습니다.
CREATE FUNCTION 윈 토토_max (정수, 정수) $$로 정수를 반환합니다.
if ($_[0] $_[1]) return $_[0];
$_[1] 반환;
$$ 언어 pl윈 토토;
SQL null 값인 경우이다
함수에 전달되면 인수 값은 다음과 같이 표시됩니다."정의되지 않음"펄에서. 위의
함수 정의는 null에서는 매우 잘 작동하지 않습니다.
입력(실제로는 0인 것처럼 작동합니다). 우리
추가할 수 있음STRICT함수에
만들 정의포스트그레SQL더 합리적인 작업을 수행합니다. null 값이 전달되면
함수는 전혀 호출되지 않고 null만 반환합니다.
결과가 자동으로 표시됩니다. 또는 다음 사항을 확인할 수도 있습니다.
함수 본문에 정의되지 않은 입력이 있습니다. 예를 들어
우리가 원했던 것윈 토토_max하나로
null이 아닌 인수를 반환하려면 null과 하나의 null이 아닌 인수를 사용하세요.
null 값이 아닌:
CREATE FUNCTION 윈 토토_max (정수, 정수) $$로 정수를 반환합니다.
내 ($x,$y) = @_;
if (! 정의 $x)
if (! Defined $y) return undef;
$y를 반환합니다;
if (! $y 정의) return $x;
if ($x $y) return $x;
$y를 반환합니다;
$$ 언어 pl윈 토토;
위에 표시된 대로 PL/Perl에서 SQL null 값을 반환하려면 함수는 정의되지 않은 값을 반환합니다. 이 작업은 다음과 같은 경우에 수행될 수 있습니다. 기능이 엄격한지 아닌지.
Perl이 반환될 수 있음PostgreSQL배열은 Perl 배열에 대한 참조로 사용됩니다. 예는 다음과 같습니다.
CREATE OR REPLACE 함수 return_array()
$$로 text[][]를 반환합니다.
return [['a"b','c,d'],['e\\f','g']];
$$ 언어 pl윈 토토;
return_array() 선택;
복합 유형 인수는 다음과 같이 함수에 전달됩니다. 해시에 대한 참조. 해시의 키는 속성입니다. 복합 유형의 이름. 예는 다음과 같습니다.
CREATE TABLE 직원(
이름 텍스트,
기본급 정수,
보너스 정수
);
CREATE FUNCTION empcomp(employee)는 정수를 $$로 반환합니다.
내 ($emp) = @_;
$emp-basesalary + $emp-bonus를 반환합니다.
$$ 언어 pl윈 토토;
SELECT 이름, empcomp(employee.*) FROM 직원;
PL/Perl 함수는 다음을 사용하여 복합 유형 결과를 반환할 수 있습니다. 동일한 접근 방식: 다음을 갖는 해시에 대한 참조를 반환합니다. 필수 속성. 예를 들어,
CREATE TYPE testrowperl AS(f1 정수, f2 텍스트, f3 텍스트);
함수 생성 또는 교체 perl_row()는 testrowperl을 $$로 반환합니다.
return f2 = '안녕하세요', f1 = 1, f3 = '세계';
$$ 언어 pl윈 토토;
SELECT * FROM perl_row();
선언된 결과 데이터 유형에 포함되지 않은 모든 열 해시에 존재하는 것은 NULL로 반환됩니다.
PL/Perl 함수는 스칼라 또는 Perl 세트를 반환할 수도 있습니다.
복합 유형. 일반적으로 한 번에 하나씩 행을 반환하려고 합니다.
시작 시간을 단축하고 대기 시간을 방지하기 위해
전체 결과 세트를 메모리에 올려 놓습니다. 당신은 이것을 할 수 있습니다return_next아래 그림과 같습니다.
마지막 이후에 참고하세요.return_next, 둘 중 하나를 입력해야 합니다.반환또는 (더 좋음)반환
undef.
함수 생성 또는 교체 perl_set_int(int)
SETOF 정수를 $$로 반환합니다.
foreach (0..$_[0])
return_next($_);
undef를 반환;
$$ 언어 pl윈 토토;
SELECT * FROM perl_set_int(5);
함수 생성 또는 교체 perl_set()
SETOF testrowperl을 $$로 반환합니다.
return_next( f1 = 1, f2 = '안녕하세요', f3 = '세계' );
return_next( f1 = 2, f2 = '안녕하세요', f3 = 'PostgreSQL' );
return_next( f1 = 3, f2 = '안녕하세요', f3 = 'PL/Perl' );
undef를 반환;
$$ 언어 pl윈 토토;
작은 결과 세트의 경우 다음 항목에 대한 참조를 반환할 수 있습니다. 스칼라, 배열에 대한 참조 또는 단순 유형, 배열 유형 및 해시에 대한 참조 각각 복합 유형. 다음은 몇 가지 간단한 예입니다. 전체 결과 세트를 배열 참조로 반환합니다.
함수 생성 또는 교체 perl_set_int(int)는 SETOF 정수를 $$로 반환합니다.
반환 [0..$_[0]];
$$ 언어 pl윈 토토;
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'
];
$$ 언어 pl윈 토토;
SELECT * FROM perl_set();
PL/펄현재는 그렇지 않습니다 도메인 유형을 완벽하게 지원합니다. 도메인을 동일하게 취급합니다. 기본 스칼라 유형으로. 제약이 있다는 뜻이다. 도메인과 관련된 조치는 시행되지 않습니다. 이것은 아니다 함수 인수에 대한 문제이지만 선언하면 위험합니다. 에이PL/펄다음으로 기능 도메인 유형을 반환합니다.
만약 당신이 다음을 사용하고 싶다면엄격pragma를 코드로 사용하는 가장 쉬운 방법은 다음과 같습니다.SET pl윈 토토.use_strict참입니다. 이 매개변수 후속 컴파일에 영향을 미칩니다.PL/펄함수이지만 함수는 아님 현재 세션에서 이미 컴파일되었습니다. 매개변수를 설정하려면 전에PL/펄이 되었습니다 로드되었으므로 추가해야 합니다."pl윈 토토"에custom_variable_classes목록 입력postgresql.conf.
다음을 사용하는 또 다른 방법엄격pragma는 넣는 것입니다
엄격한 사용;
함수 본문에서.