이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 44.1. pl/젠 토토 functions버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

41.1. pl/롤 토토 functions

PL/롤 토토의 함수는 표준을 통해 선언됩니다PostgreSQL : 문서 : 8.3 : 무지개 토토 만들기구문 :

기능 생성funcName(Argument-List)
  보고return-type$$
  # pl/롤 토토 기능 본체
$$ 언어 plythonu;

함수의 본문은 단순히 파이썬 스크립트입니다. 언제 함수라고합니다. 인수는의 요소로 전달됩니다. 정렬args []; 명명 된 인수도 있습니다 롤 토토 스크립트에 일반 변수로 전달되었습니다. 결과는입니다 평범한 방식으로 파이썬 코드에서 반환 됨return또는수율(경우 결과 세트 문의).

예를 들어, 더 큰 정수를 반환하는 함수 다음과 같이 정의 할 수 있습니다.

기능 생성 Pymax (A Integer, B Integer)
  정수를 반환합니다
$$로
  A B :
    반환 a
  반환 b
$$ 언어 plythonu;

함수의 본문으로 제공되는 파이썬 코드 정의는 파이썬 함수로 변환됩니다. 예를 들어, 위의 결과 :

def __pl롤 토토_procedure_pymax_23456 () :
  A B :
    반환 a
  반환 b

23456이 기능에 할당 된 OID라고 가정하면postgresql.

PostgreSQL함수 매개 변수는 글로벌에서 사용할 수 있습니다args목록. 에서Pymaxexample,args [0]첫 번째 인수로 전달 된 모든 것을 포함하고args [1]두 번째 인수를 포함합니다 값. 또는 표시된대로 이름이 지정된 매개 변수를 사용할 수 있습니다 위의 예. 명명 된 매개 변수의 사용은 일반적으로 더 많습니다 읽기.

SQL 널 값인 경우is 함수로 전달되면 인수 값이로 나타납니다.없음파이썬에서. 위의 기능 정의는 null 입력에 대한 잘못된 답변을 반환합니다. 우리는 할 수 있습니다 추가하다엄격한함수 정의로 만들다PostgreSQL뭔가를하십시오 더 합리적 : 널 값이 전달되면 함수는 전혀 부름을 받지만 널 결과를 반환 할 것입니다. 자동으로. 또는 NULL 입력을 확인할 수 있습니다 기능 본문 :

기능 생성 Pymax (A Integer, B Integer)
  정수를 반환합니다
$$로
  (a는 없음) 또는 (b는 없음)이면 :
    반환 없음
  A B :
    반환 a
  반환 b
$$ 언어 plythonu;

위와 같이, pl/롤 토토에서 sql null 값을 반환하려면 함수, 값을 반환없음. 이것은 할 수 있습니다 함수가 엄격한 지 아닌지를 수행해야합니다.

복합 유형 인수는 롤 토토으로 기능으로 전달됩니다 매핑. 매핑의 요소 이름은 속성입니다 복합 유형의 이름. 전달 된 행에 속성이있는 경우 널 값이 있고 값이 있습니다없음매핑에서. 예는 다음과 같습니다.

테이블 직원 만들기 (
  이름 텍스트,
  급여 정수,
  시대 정수
);

기능 초과 지불 (E 직원) 생성
  부울을 반환합니다
$$로
  E [ "급여"] 200000 :
    진실을 반환하십시오
  if (e [ "age"] <30) 및 (e [ "Salary"] 100000) :
    진실을 반환하십시오
  거짓을 반환하십시오
$$ 언어 plythonu;

행이나 복합 유형을 반환하는 방법에는 여러 가지가 있습니다. 파이썬 기능. 다음 예는 다음과 같이 가정합니다.

유형을 만들어 afform as (
  이름 텍스트,
  가치 정수
);

복합 결과는 a :로 반환 할 수 있습니다.

시퀀스 유형 (튜플 또는 목록이지만 세트가 아니기 때문에 색인 할 수 없음)

반환 된 시퀀스 객체의 숫자는 동일해야합니다 복합 결과 유형으로서의 항목에는 필드가 있습니다. 항목 인덱스 0이있는 첫 번째 필드에 할당됩니다. 복합 유형, 1 ~ 두 번째 등. 예를 들어:

함수 만들기 make_pair (이름 텍스트, 값 정수)
  이름을 name_value를 반환합니다
$$로
  반환 [이름, 값]
  # 또는 대안 적으로 튜플 : return (이름, 값)
$$ 언어 plythonu;

모든 열에 대해 SQL NULL을 반환하려면 삽입없음해당 위치에서.

​​매핑 (사전)

각 결과 유형 열의 값은 열 이름을 가진 매핑. 예:

함수 만들기 make_pair (이름 텍스트, 값 정수)
  이름을 name_value를 반환합니다
$$로
  return  "name": name, "value": value

추가 사전 키/값 쌍은 무시됩니다. 누락 된 키는 오류로 취급됩니다. SQL NULL을 반환합니다 모든 열의 값, 삽입없음해당 열 이름을 키로 사용합니다.

개체 (모든 객체 제공 방법__getattr__)

이것은 매핑과 동일하게 작동합니다. 예:

함수 만들기 make_pair (이름 텍스트, 값 정수)
  이름을 name_value를 반환합니다
$$로
  Class Named_value :
    def __init__ (self, n, v) :
      self.name = n
      self.value = v
  RETURN NAMED_VALUE (이름, 값)

  # 또는 간단히
  클래스 NV : 패스
  nv.name = 이름
  nv.value = value
  반환 nv
$$ 언어 plythonu;

반환 값을 제공하지 않으면 Python은 다음을 반환합니다. 기본없음. pl/롤 토토롤 토토의 번역없음SQL NULL 값으로.

apl/롤 토토함수도 할 수 있습니다 스칼라 또는 복합 유형의 반환 세트. 여러 가지 방법이 있습니다 반환 된 객체가 내부적으로 회전하기 때문에이를 달성하기 위해 반복자로. 다음 예는 복합재가 있다고 가정합니다 유형:

유형 인사말 생성 AS (
  텍스트,
  누가 문자
);

세트 결과는 a :에서 반환 할 수 있습니다.

시퀀스 유형 (튜플, 목록, 세트)
기능 생성 인사말 (텍스트 방법)
  정해진 인사말을 반환합니다
$$로
  # 복합 유형으로 목록을 포함하는 튜플 리턴
  # 다른 모든 조합도 작동합니다
  return ([How, "World"], [How, "Postgresql"], [How, "Pl/Python"]))))
$$ 언어 plythonu;
반복자 (모든 객체 제공)__iter__and다음방법)
기능 생성 인사말 (텍스트 방법)
  정해진 인사말을 반환합니다
$$로
  클래스 프로듀서 :
    def __init__ (자기, 방법, 누가) :
      self.how = 방법
      self.ho = 누가
      self.ndx = -1

    def __iter__ (self) :
      자아를 반환하십시오

    def next (self) :
      self.ndx += 1
      if self.ndx == len (self.who) :
        중지를 높이십시오
      return (self.how, self.who [self.ndx])

  리턴 프로듀서 (How, [ "World", "Postgresql", "Pl/Python"]))))
$$ 언어 plythonu;
Generator (수율)
기능 생성 인사말 (텍스트 방법)
  정해진 인사말을 반환합니다
$$로
  [ "World", "Postgresql", "pl/롤 토토"]의 사람을 위해 :
    수율 (어떻게, 누가)
$$ 언어 plythonu;
경고

현재 Python으로 인해버그 #1483133, 일부 디버그 버전 롤 토토 2.4 (옵션으로 구성 및 컴파일-with-pydebug)가 알려져 있습니다 충돌하려면PostgreSQL사용시 서버 정해진 결과를 반환하는 반복자. 방치되지 않았습니다 Fedora 4의 버전에는이 버그가 포함되어 있습니다. 그렇지 않습니다 Python 또는 ON의 생산 버전에서 발생합니다 페도라의 패치 버전 4.

글로벌 사전SD사용 가능합니다 기능 호출간에 데이터를 저장합니다. 이 변수는 비공개입니다 정적 데이터. 글로벌 사전gdis 세션 내의 모든 롤 토토 기능에 사용할 수있는 공개 데이터. 조심스럽게 사용하십시오.

각 함수는 파이썬에서 자체 실행 환경을 가져옵니다. 통역사, 글로벌 데이터 및 기능 인수myfuncMyFunc2. 예외는 데이터입니다 에서GD언급 된대로 사전 위에.