PL/스포츠 토토 언어로 함수를 생성하려면 표준을 사용하십시오.PostgreSQL : 문서 : 8.3 : 무지개 토토 만들기구문:
함수 생성기능 이름 (인수 유형) 반환반환 유형AS $$
# PL/스포츠 토토 함수 본문
$$ 언어 pl스포츠 토토;
함수 본문은 일반 스포츠 토토 코드입니다. 실제로, PL/스포츠 토토 글루 코드는 이를 스포츠 토토 서브루틴 내부에 래핑합니다. PL/펄 함수는 항상 스칼라 값을 반환해야 합니다. 더 많이 돌려받을 수 있어요 복잡한 구조(배열, 레코드 및 세트)를 반환하여 아래에 설명된 대로 참조하세요. 목록을 반환하지 마세요.
참고:이름이 지정된 중첩 서브루틴을 사용하는 방법은 다음과 같습니다. Perl에서는 위험합니다. 특히 어휘를 참조하는 경우 더욱 그렇습니다. 둘러싸는 범위의 변수. PL/Perl 기능 때문에 서브루틴, 즉 사용자가 생성한 명명된 서브루틴으로 래핑됩니다. 중첩됩니다. 일반적으로 생성하는 것이 훨씬 안전합니다. coderef를 통해 호출하는 익명 서브루틴. 참조스포츠 토토diag자세한 내용은 매뉴얼 페이지 세부사항.
의 구문은함수 생성명령을 사용하려면 함수 본문을 문자열로 작성해야 합니다. 일정하다. 일반적으로 달러 인용을 사용하는 것이 가장 편리합니다. (참조섹션 4.1.2.2)를 문자열 상수로 사용합니다. 탈출을 사용하기로 선택한 경우 문자열 구문E'', 두 배로 늘려야 합니다. 작은따옴표(') 및 백슬래시 (\) 함수 본문에 사용됨 (참조섹션 4.1.2.1).
인수와 결과는 다른 스포츠 토토에서처럼 처리됩니다 서브루틴: 인수가 전달됩니다.@_, 결과 값은반환또는 기능.
예를 들어, 두 정수 중 더 큰 값을 반환하는 함수 값은 다음과 같이 정의될 수 있습니다.
CREATE FUNCTION 스포츠 토토_max (정수, 정수) $$로 정수를 반환합니다.
if ($_[0] $_[1]) return $_[0];
$_[1] 반환;
$$ 언어 pl스포츠 토토;
SQL null 값인 경우이다
함수에 전달되면 인수 값은 다음과 같이 표시됩니다."정의되지 않음"펄에서. 위의
함수 정의는 null 입력에서는 매우 잘 작동하지 않습니다.
(실제로는 0인 것처럼 작동합니다.) 추가할 수도 있습니다STRICT함수 정의에
만들다PostgreSQL뭔가를 해라
더 합리적입니다. null 값이 전달되면 함수는
전혀 호출되지 않지만 null 결과만 반환합니다.
자동으로. 또는 정의되지 않은 입력을 확인할 수도 있습니다.
함수 본문에서. 예를 들어 우리가 원한다고 가정해 보겠습니다.스포츠 토토_max하나의 null과 하나의 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 값을 반환하려면 함수는 정의되지 않은 값을 반환합니다. 이는 다음 여부에 관계없이 수행될 수 있습니다. 기능이 엄격한지 아닌지.
참조가 아닌 함수 인수의 모든 내용은 표준에 있는 문자열PostgreSQL외부 텍스트 표현 관련 데이터 유형. 일반 숫자나 문자의 경우 유형에 따라 Perl은 옳은 일을 할 것이고 프로그래머는 그렇게 할 것입니다. 일반적으로 걱정할 필요가 없습니다. 그러나 다른 경우에는 주장은 좀 더 나은 형태로 변환되어야 할 것이다. Perl에서 사용할 수 있습니다. 예를 들어 인수를 변환하는 방법은 다음과 같습니다. 유형바이테아이스케이프되지 않은 바이너리로 데이터:
내 $arg = 시프트;
$arg =~ s!\\(?:\\|(\d3))!$1 ? chr(oct($1)) : "\\"!ge;
마찬가지로 다음으로 전달된 값은PostgreSQL외부 텍스트에 있어야 합니다. 표현형식. 예를 들어 바이너리를 이스케이프하는 방법은 다음과 같습니다. 유형의 반환 값에 대한 데이터바이테아:
$retval =~ s!(\\|[^ -~])!sprintf("\\%03o",ord($1))!ge;
$retval을 반환;
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();
다음을 사용하고 싶다면엄격프라그마 귀하의 코드를 사용하여 가장 쉬운 방법은 다음과 같습니다.SET pl스포츠 토토.use_strict에 사실. 이 매개변수는 다음 컴파일에 영향을 줍니다.PL/펄기능하지만 그렇지 않음 현재 세션에서 이미 컴파일된 함수입니다. 설정하려면 이전 매개변수PL/펄있음 로드되었으므로 추가해야 합니다."pl스포츠 토토"에custom_variable_classes목록 입력postgresql.conf.
다음을 사용하는 또 다른 방법엄격프라그마 넣는 것입니다:
엄격한 사용;
함수 본문에서.