PL/롤 토토의 기능은 표준을 통해 선언됩니다.PostgreSQL : 문서 : 8.3 : 무지개 토토 만들기구문:
함수 생성기능 이름 (인수 목록) 반품반환 유형AS $$ # PL/롤 토토 함수 본문 $$ 언어 pl롤 토토u;
함수의 본문은 단순히 롤 토토 스크립트입니다. 때 함수가 호출되면 해당 인수가 요소로 전달됩니다. 배열인수[]; 명명된 인수도 롤 토토 스크립트에 일반 변수로 전달됩니다. 결과는 일반적인 방법으로 롤 토토 코드에서 반환됩니다.반환또는수율(경우에 따라 결과 집합 문의 내용).
예를 들어, 두 정수 중 더 큰 값을 반환하는 함수 다음과 같이 정의할 수 있습니다.
CREATE FUNCTION pymax(a 정수, b 정수)
정수를 반환합니다.
AS $$
a b인 경우:
반환하다
b를 돌려주다
$$ 언어 plpythonu;
함수 본문으로 제공되는 Python 코드 정의는 Python 함수로 변환됩니다. 예를 들어, 위의 결과는 다음과 같습니다.
def __plpython_procedure_pymax_23456():
a b인 경우:
반환하다
반환 b
23456이 다음에 의해 함수에 할당된 OID라고 가정포스트그레SQL.
그포스트그레SQL함수
매개변수는 전역에서 사용할 수 있습니다.인수목록. 에서파이맥스예,인수[0]첫 번째 인수로 전달된 내용을 포함하고인수[1]두 번째 인수를 포함합니다.
가치. 또는 다음과 같이 명명된 매개변수를 사용할 수 있습니다.
위의 예. 일반적으로 명명된 매개변수를 사용하는 것이 더 많습니다.
읽을 수 있습니다.
SQL null 값인 경우이다 함수에 전달되면 인수 값은 다음과 같이 표시됩니다.없음파이썬에서. 위의 기능 정의는 null 입력에 대해 잘못된 대답을 반환합니다. 우리는 할 수 있었다 추가STRICT함수 정의에 만들다PostgreSQL뭔가를 해라 더 합리적입니다. null 값이 전달되면 함수는 전혀 호출되지 않지만 null 결과만 반환합니다. 자동으로. 또는 다음에서 null 입력을 확인할 수 있습니다. 함수 본문:
CREATE FUNCTION pymax (a 정수, b 정수)
정수를 반환합니다.
AS $$
(a가 없음) 또는 (b가 없음)인 경우:
반환 없음
a b인 경우:
반환하다
b를 돌려주다
$$ 언어 plpythonu;
위에 표시된 대로 PL/Python에서 SQL null 값을 반환하려면 함수, 값을 반환합니다.없음. 이것은 할 수 있다 기능이 엄격하든 아니든 상관없이 수행됩니다.
복합 유형 인수가 Python으로 함수에 전달됩니다. 매핑. 매핑의 요소 이름은 속성입니다. 복합 유형의 이름. 전달된 행에 속성이 있는 경우 null 값이 있으면 값이 있습니다.없음매핑에 있습니다. 예는 다음과 같습니다.
CREATE TABLE 직원(
이름 텍스트,
급여 정수,
연령 정수
);
CREATE FUNCTION 초과 지급(e 직원)
반환 부울
AS $$
e["salary"] 200000인 경우:
True를 반환
if (e["age"] < 30) 및 (e["salary"] 100000):
True를 반환
거짓을 반환
$$ 언어 plpythonu;
다음에서 행 또는 복합 유형을 반환하는 방법에는 여러 가지가 있습니다. 파이썬 함수. 다음 예에서는 다음과 같이 가정합니다.
CREATE TYPE 명명된_값 AS( 이름 텍스트, 값 정수 );
복합 결과는 다음과 같이 반환될 수 있습니다:
반환된 시퀀스 개체에는 동일한 수의 개체가 있어야 합니다. 복합 결과 유형인 항목에는 필드가 있습니다. 항목 인덱스 0이 있는 필드가 첫 번째 필드에 할당됩니다. 복합 유형, 1에서 두 번째 등. 예를 들면:
CREATE FUNCTION make_pair(이름 텍스트, 값 정수) 명명된_값을 반환합니다. AS $$ return [ 이름, 값 ] # 또는 튜플로: return ( name, value ) $$ 언어 plpythonu;
모든 열에 대해 SQL null을 반환하려면 삽입없음해당 위치에.
각 결과 유형 열의 값은 다음에서 검색됩니다. 열 이름을 키로 사용하는 매핑입니다. 예:
CREATE FUNCTION make_pair(이름 텍스트, 값 정수) 명명된_값을 반환합니다. AS $$ return "이름": 이름, "값": 값
추가 사전 키/값 쌍은 무시됩니다. 누락된 키는 오류로 처리됩니다. SQL null을 반환하려면 모든 열의 값, 삽입없음해당 열 이름을 키로 사용합니다.
이것은 매핑과 동일하게 작동합니다. 예:
CREATE FUNCTION make_pair(이름 텍스트, 값 정수)
명명된_값을 반환합니다.
AS $$
클래스 이름_값:
def __init__ (self, n, v):
self.name = n
자기값 = v
명명된_값(이름, 값)을 반환합니다.
# 또는 단순히
클래스 NV: 통과
nv.name = 이름
nv.value = 값
네바다 반납
$$ 언어 plpythonu;
반환 값을 제공하지 않으면 Python은 다음을 반환합니다. 기본값없음. PL/파이썬파이썬의 번역없음SQL null 값으로.
A PL/파이썬함수도 가능 스칼라 또는 복합 유형 세트를 반환합니다. 여러 가지 방법이 있습니다 반환된 객체가 내부적으로 회전되기 때문에 이를 달성하려면 반복자로. 다음 예에서는 복합이 있다고 가정합니다. 유형:
다음 유형의 인사말 작성( 어떻게 텍스트, 누가 문자를 보내? );
설정된 결과는 다음에서 반환될 수 있습니다:
CREATE FUNCTION 인사말(텍스트 방법) RETURN SETOF 인사말 AS $$ # 목록을 복합 유형으로 포함하는 튜플을 반환합니다. # 다른 모든 조합도 작동합니다 return ( [ 방법, "세계" ], [ 방법, "PostgreSQL" ], [ 방법, "PL/Python" ] ) $$ 언어 plpythonu;
CREATE FUNCTION 인사말(텍스트 방법)
RETURN SETOF 인사말
AS $$
클래스 프로듀서:
def __init__ (자신, 어떻게, 누구):
self.how = 어떻게
self.who = 누구
self.ndx = -1
def __iter__ (자체):
자기 자신을 돌려보내다
def 다음 (자체):
self.ndx += 1
self.ndx == len(self.who)인 경우:
StopIteration 높이기
반환( self.how, self.who[self.ndx] )
반환 생산자(방법, [ "World", "PostgreSQL", "PL/Python" ])
$$ 언어 plpythonu;
CREATE FUNCTION 인사말(텍스트 방법)
RETURN SETOF 인사말
AS $$
[ "World", "PostgreSQL", "PL/Python" ]에서 누구를 위해:
산출물(어떻게, 누가)
$$ 언어 plpythonu;
| 경고 |
|
현재 Python으로 인해버그 #1483133, 일부 디버그 버전 롤 토토 2.4(옵션으로 구성 및 컴파일됨)--with-pydebug)이 알려져 있습니다 충돌하다PostgreSQL서버 사용 시 설정된 결과를 반환하는 반복자입니다. 패치되지 않음 Fedora 4 버전에는 이 버그가 포함되어 있습니다. 그렇지 않다 Python의 프로덕션 버전이나 Fedora 4의 패치 버전. |
글로벌 사전SD사용 가능 함수 호출 사이에 데이터를 저장합니다. 이 변수는 비공개입니다. 정적 데이터. 글로벌 사전GD이다 세션 내의 모든 롤 토토 함수에 사용할 수 있는 공개 데이터입니다. 주의해서 사용하세요.
각 함수는 Python에서 자체 실행 환경을 갖습니다.
인터프리터는 전역 데이터와 함수 인수가myfunc다음에는 사용할 수 없습니다myfunc2. 예외는 데이터입니다.
에서GD사전, 언급한 대로
위.