44.1. PL/파이썬 함수#

PL/젠 토토의 기능은 표준을 통해 선언됩니다.함수 생성구문:

함수 생성기능 이름 (인수 목록)
  반품반환 유형AS $$
  # PL/젠 토토 함수 본문
$$ 언어 pl젠 토토3u;

함수의 본문은 단순히 젠 토토 스크립트입니다. 함수가 호출되면 해당 인수가 목록의 요소로 전달됩니다.인수; 명명된 인수도 Python 스크립트에 일반 변수로 전달됩니다. 일반적으로 명명된 인수를 사용하는 것이 더 읽기 쉽습니다. 결과는 일반적인 방식으로 Python 코드에서 반환됩니다.반환또는수율(결과 집합 문의 경우). 반환 값을 제공하지 않으면 Python은 기본값을 반환합니다.없음. PL/파이썬파이썬의 번역없음SQL null 값에 넣습니다. 프로시저에서 Python 코드의 결과는 다음과 같아야 합니다.없음(일반적으로 a 없이 절차를 종료하면 달성됩니다.반환문 또는 a를 사용하여반환인수 없는 명령문); 그렇지 않으면 오류가 발생합니다.

예를 들어, 두 정수 중 더 큰 값을 반환하는 함수는 다음과 같이 정의될 수 있습니다:

CREATE FUNCTION pymax (a 정수, b 정수)
  정수를 반환합니다.
AS $$
  a  b인 경우:
    반환하다
  b를 돌려주다
$$ 언어 plpython3u;

함수 정의의 본문으로 제공되는 Python 코드는 Python 함수로 변환됩니다. 예를 들어 위의 결과는 다음과 같습니다.

def __plpython_procedure_pymax_23456():
  a  b인 경우:
    반환하다
  반환 b

23456이 다음에 의해 함수에 할당된 OID라고 가정합니다.포스트그레SQL.

인수는 전역 변수로 설정되었습니다. Python의 범위 지정 규칙으로 인해 변수가 블록에서 전역으로 다시 선언되지 않는 한 함수 내에서 인수 변수를 변수 이름 자체와 관련된 표현식의 값으로 재할당할 수 없다는 미묘한 결과가 발생합니다. 예를 들어 다음은 작동하지 않습니다.

CREATE FUNCTION pystrip(x 텍스트)
  텍스트를 반환합니다.
AS $$
  x = x.strip() # 오류
  x를 반환
$$ 언어 plpython3u;

다음에 할당하기 때문에x만든다x전체 블록에 대한 지역 변수 및 따라서x할당 오른쪽에 있는 것은 아직 할당되지 않은 지역 변수를 나타냅니다.x, PL/젠 토토 함수 매개변수가 아닙니다. 를 사용하여글로벌진술, 이것은 작동하도록 만들 수 있습니다:

CREATE FUNCTION pystrip(x 텍스트)
  텍스트를 반환합니다.
AS $$
  글로벌엑스
  x = x.strip() # 이제 알았어
  x를 반환
$$ 언어 plpython3u;

그러나 PL/젠 토토의 구현 세부사항에 의존하지 않는 것이 좋습니다. 함수 매개변수를 읽기 전용으로 처리하는 것이 좋습니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.