이 문서는 지원되지 않는 버전의 토토 꽁 머니을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다토토 꽁 머니 : 문서 : 17 : 44.2. 데이터 값버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

43.3. 데이터 값

일반적으로 pl/python의 목표는 a를 제공하는 것입니다."자연"토토 꽁 머니 간의 매핑 그리고 파이썬 세계. 이것은 데이터 매핑 규칙을 알려줍니다 아래 설명.

43.3.1. 데이터 유형 매핑

함수 인수는 토토 꽁 머니 유형에서 a로 변환됩니다. 해당 파이썬 유형 :

  • 토토 꽁 머니부울Python으로 변환bool.

  • 토토 꽁 머니smallintandintPython으로 변환int. 토토 꽁 머니bigintandOIDLongin Python 2 및 tointPython 3에서

  • 토토 꽁 머니Real, 더블숫자변환됩니다 파이썬에float. 에 주목하십시오숫자이것은 정보를 잃고 이끌 수 있습니다 잘못된 결과. 이것은 향후 릴리스에서 고정 될 수 있습니다.

  • 토토 꽁 머니BYTEAPython으로 변환strPython 2에서바이트Python 3에서. Python 2에서는 문자열이 있어야합니다. 문자 인코딩없이 바이트 시퀀스로 취급.

  • 토토 꽁 머니 문자열을 포함한 다른 모든 데이터 유형 유형, 파이썬으로 변환str. ~ 안에 Python 2,이 문자열은 토토 꽁 머니 Server 인코딩에 있습니다. ~에 Python 3, 그것은 모든 문자열과 같은 유니 코드 문자열이 될 것입니다.

  • Nonscalar 데이터 유형은 아래를 참조하십시오.

함수 리턴 값은 선언 된 토토 꽁 머니로 변환됩니다 다음과 같이 반환 데이터 유형 :

  • 토토 꽁 머니 반환 유형이부울, 반환 값은 진실에 대해 평가됩니다 에 따르면Python규칙. 즉, 0이고 빈 문자열은 거짓이지만 특히'f'진실입니다.

  • 토토 꽁 머니 반환 유형이BYTEA, 리턴 값은 문자열 (Python 2) 또는 바이트로 변환됩니다. (Python 3) 각각의 Python 내장 사용, 결과 변환BYTEA.

  • 다른 모든 토토 꽁 머니 리턴 유형의 경우 반환 된 Python 값 파이썬 내장을 사용하여 문자열로 변환str, 결과는 입력 함수로 전달됩니다. 토토 꽁 머니 데이터 유형의

    Python 2의 문자열은 Postgresql Server에 있어야합니다. 그들이 토토 꽁 머니로 전달 될 때 인코딩. 그렇지 않은 줄 현재 서버 인코딩에서 유효하면 오류가 발생하지만 모든 인코딩 불일치를 감지 할 수 있으므로 쓰레기 데이터는 여전히 이것이 올바르게 수행되지 않은 경우 결과. 유니 코드 문자열입니다 올바른 인코딩으로 자동으로 변환되므로 더 안전 할 수 있습니다. 그리고 그것들을 사용하는 것이 더 편리합니다. 파이썬 3에서는 모든 문자열이 있습니다 유니 코드 문자열.

  • Nonscalar 데이터 유형은 아래를 참조하십시오.

선언 된 토토 꽁 머니 사이의 논리적 불일치 리턴 유형 및 실제 반환 개체의 파이썬 데이터 유형 신고되지 않습니다. 값은 어쨌든 변환됩니다.

43.3.2. 널, 없음

SQL NULL 값이 함수로 전달되면 인수 값 로 나타납니다.없음파이썬에서. 예를 들어, 의 함수 정의Pymax표시PostgreSQL : 문서 : 9.3 : PL/사설 토토 함수돌아올 것입니다 널 입력에 대한 잘못된 대답. 우리는 추가 할 수 있습니다엄격한토토 꽁 머니더 많은 일을하십시오 합리적 : 널 값이 전달되면 함수는 전혀 전화를 걸었지만 자동으로 널 결과를 반환합니다. 또는 함수의 널 입력을 확인할 수 있습니다. 몸:

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

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

43.3.3. 배열, 목록

SQL 어레이 값은 Python 목록으로 PL/Python으로 전달됩니다. 에게 PL/Python 함수에서 SQL 배열 값을 반환하고 Python Sequence, 예를 들어 목록 또는 튜플 :

함수 만들기 return_arr ()
  int []를 반환합니다.
$$로
반환 (1, 2, 3, 4, 5)
$$ 언어 plpythonu;

return_arr ()를 선택하십시오.
 return_arr  
-------------
 1,2,3,4,5

파이썬에서 문자열은 시퀀스이며 파이썬에 익숙 할 수있는 바람직하지 않은 효과 프로그래머 :

함수 만들기 return_str_arr ()
  varchar []를 반환합니다.
$$로
"안녕하세요"반환
$$ 언어 plpythonu;

return_str_arr ()를 선택하십시오.
 return_str_arr
---------------
 안녕하세요

43.3.4. 복합 유형

복합 유형 인수는 Python과 같은 함수로 전달됩니다 매핑. 매핑의 요소 이름은 속성 이름입니다. 복합 유형의. 전달 된 행의 속성이 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;

함수out매개 변수도 있습니다 지원. 예를 들어:

17081_17222

43.3.5. 설정 기능 설정

apl/python함수도 가능합니다 스칼라 또는 복합 유형의 반환 세트. 몇 가지 방법이 있습니다 반환 된 객체가 내부적으로로 바뀌기 때문에 이것을 달성합니다. 반복자. 다음 예는 복합재가 있다고 가정합니다 유형:

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

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

시퀀스 유형 (튜플, 목록, 세트)
기능 생성 인사말 (텍스트 방법)
  정해진 인사말을 반환합니다
$$로
  # 복합 유형으로 목록을 포함하는 튜플 리턴
  # 다른 모든 조합도 작동합니다
  return ([How, "World"], [How, "Postgresql"], [How, "Pl/Python"]))))
$$ 언어 plythonu;
iterator (모든 객체 제공__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/python"]의 사람을 위해 :
    수율 (어떻게, 누가)
$$ 언어 plythonu;
경고

Python으로 인해버그 #1483133, 일부 디버그 버전의 Python 2.4 (옵션으로 구성 및 컴파일-with-pydebug)는 충돌하는 것으로 알려져 있습니다토토 꽁 머니반복기를 사용할 때 서버 설정 결과를 반환하십시오. Fedora 4의 방치되지 않은 버전에는 이것을 포함합니다 벌레. Python의 생산 버전 또는 페도라의 패치 버전 4.

|out매개 변수 (사용Setof record 반환) 또한 지원됩니다. 예를 들어:

함수 만들기 multiout_simple_setof (n Integer, Out Integer, Out Integer)는 record를 $$로 반환합니다.
반환 [(1, 2)] * n
$$ 언어 plpythonu;

multiout_simple_setof (3);에서 *를 선택하십시오.