| 토토 꽁 머니 9.3.25 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.3 : PL/사설 토토 함수 | PostgreSQL : 문서 : 9.3 : PL/토토 사이트 -토토 사이트 Prossural Language | 43장. PL/Python - Python 절차 언어 | PostgreSQL : 문서 : 9.3 : 스포츠 토토 사이트 공유 | |
일반적으로 말하면, PL/Python의 목표는 다음을 제공하는 것입니다."자연스러운"토토 꽁 머니 간 매핑 중 그리고 파이썬 세계. 이는 데이터 매핑 규칙을 알려줍니다. 아래에 설명되어 있습니다.
함수 인수는 토토 꽁 머니 유형에서 해당 Python 유형:
포스트그레SQL부울파이썬으로 변환됨부울.
포스트그레SQLsmallint그리고int파이썬으로 변환됩니다int. 포스트그레SQL비긴트그리고oid다음으로 변환됩니다긴에 Python 2 및 toint파이썬 3에서.
포스트그레SQL진짜, 더블그리고숫자변환되었습니다 파이썬으로플로트. 다음을 참고하세요.숫자이로 인해 정보가 손실되고 다음으로 이어질 수 있습니다. 잘못된 결과. 이 문제는 향후 릴리스에서 수정될 수 있습니다.
토토 꽁 머니바이테아파이썬으로 변환됨strPython 2 및 to바이트Python 3. Python 2에서 문자열은 다음과 같아야 합니다. 문자 인코딩 없이 바이트 시퀀스로 처리됩니다.
토토 꽁 머니 문자열을 포함한 기타 모든 데이터 유형 유형은 Python으로 변환됩니다.str. 에서 Python 2에서는 이 문자열이 토토 꽁 머니 서버 인코딩에 포함됩니다. 안으로 Python 3에서는 모든 문자열과 마찬가지로 유니코드 문자열이 됩니다.
비스칼라 데이터 유형에 대해서는 아래를 참조하세요.
함수 반환 값은 선언된 토토 꽁 머니로 변환됩니다. 다음과 같이 데이터 유형을 반환합니다.
토토 꽁 머니 반환 유형이 다음과 같은 경우부울, 반환 값이 참인지 평가됩니다. 에 따르면파이썬규칙. 즉, 0과 빈 문자열은 false이지만 특히'f'사실입니다.
토토 꽁 머니 반환 유형이 다음과 같은 경우바이테아, 반환 값은 문자열(Python 2) 또는 바이트로 변환됩니다. (Python 3) 해당 Python 내장 기능을 사용하여 결과 변환 중바이테아.
다른 모든 토토 꽁 머니 반환 유형의 경우 반환된 Python 값 Python 내장을 사용하여 문자열로 변환됩니다.str, 결과는 입력 함수에 전달됩니다. 토토 꽁 머니 데이터 유형 중 하나입니다.
Python 2의 문자열은 토토 꽁 머니 서버에 있어야 합니다. 토토 꽁 머니에 전달될 때 인코딩됩니다. 그렇지 않은 문자열 현재 서버 인코딩에서 유효하면 오류가 발생하지만 그렇지 않습니다. 모든 인코딩 불일치를 감지할 수 있으므로 가비지 데이터는 여전히 이것이 올바르게 수행되지 않았을 때 발생하는 결과입니다. 유니코드 문자열은 자동으로 올바른 인코딩으로 변환되므로 더욱 안전합니다. 그것을 사용하는 것이 더 편리합니다. Python 3에서는 모든 문자열이 유니코드 문자열.
비스칼라 데이터 유형에 대해서는 아래를 참조하세요.
선언된 토토 꽁 머니 간의 논리적 불일치에 유의하세요. 반환 유형과 실제 반환 객체의 Python 데이터 유형 플래그가 지정되지 않았습니다. 어떤 경우에도 값이 변환됩니다.
SQL null 값이 함수에 전달되면 인수 값
다음과 같이 표시됩니다.없음파이썬에서. 예를 들어,
함수 정의파이맥스표시됨PostgreSQL : 문서 : 9.3 : PL/사설 토토 함수반환할 것입니다
null 입력에 대한 잘못된 대답입니다. 추가할 수도 있습니다STRICT만들 함수 정의에토토 꽁 머니뭔가 더 해라
합리적: null 값이 전달되면 함수는 실행되지 않습니다.
전혀 호출되지 않지만 자동으로 null 결과를 반환합니다.
또는 함수에서 null 입력을 확인할 수 있습니다.
본문:
CREATE FUNCTION pymax(a 정수, b 정수)
정수를 반환합니다.
AS $$
(a가 없음) 또는 (b가 없음)인 경우:
반환 없음
a b인 경우:
반환하다
b를 돌려주다
$$ 언어 plpythonu;
위에 표시된 대로 PL/Python에서 SQL null 값을 반환하려면 함수, 값을 반환합니다.없음. 이것은 할 수 있다 기능이 엄격하든 아니든 상관없이 수행됩니다.
SQL 배열 값은 Python 목록으로 PL/Python에 전달됩니다. 받는 사람 PL/Python 함수에서 SQL 배열 값을 반환하고 Python 시퀀스(예: 목록 또는 튜플):
함수 생성 return_arr() 반환 정수[] AS $$ 반환 (1, 2, 3, 4, 5) $$ 언어 plpythonu; SELECT return_arr(); return_arr ------------- 1,2,3,4,5
Python에서 문자열은 시퀀스이며 다음을 가질 수 있습니다. Python에 익숙할 수 있는 바람직하지 않은 효과 프로그래머:
함수 생성 return_str_arr() varchar[]를 반환합니다. AS $$ "안녕하세요"를 반환 $$ 언어 plpythonu; SELECT return_str_arr(); return_str_arr ---------------- h,e,l,l,o
복합 유형 인수가 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;함수아웃매개변수도 지원됩니다. 예를 들면:
CREATE FUNCTION multiout_simple(OUT i 정수, OUT j 정수) AS $$ 반환 (1, 2) $$ 언어 plpythonu; SELECT * FROM multiout_simple();
A PL/파이썬함수도 가능 스칼라 또는 복합 유형 세트를 반환합니다. 여러 가지 방법이 있습니다 반환된 객체가 내부적으로 변환되기 때문에 이를 달성합니다. 반복자. 다음 예에서는 복합이 있다고 가정합니다. 유형:
다음 유형의 인사말 작성( 어떻게 텍스트, 누가 문자를 보내? );
설정된 결과는 다음에서 반환될 수 있습니다:
CREATE FUNCTION 인사말(텍스트 방법) RETURN SETOF 인사말 AS $$ # 목록을 복합 유형으로 포함하는 튜플을 반환합니다. # 다른 모든 조합도 작동합니다 return ( [ 방법, "세계" ], [ 방법, "토토 꽁 머니" ], [ 방법, "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", "토토 꽁 머니", "PL/Python" ])
$$ 언어 plpythonu;CREATE FUNCTION 인사말(텍스트 방법)
RETURN SETOF 인사말
AS $$
[ "World", "토토 꽁 머니", "PL/Python" ]에서 누구를 위해:
산출물(어떻게, 누가)
$$ 언어 plpythonu;
| 경고 |
|
파이썬으로 인해버그 #1483133, Python 2.4의 일부 디버그 버전 (옵션으로 구성 및 컴파일됨--with-pydebug)는 다음을 충돌시키는 것으로 알려져 있습니다.토토 꽁 머니반복자를 사용하여 서버를 설정된 결과를 반환합니다. 패치되지 않은 Fedora 4 버전에는 다음이 포함되어 있습니다. 버그. Python의 프로덕션 버전이나 Fedora 4의 패치 버전. |
설정 반환 함수아웃매개변수(사용SETOF 레코드 반환) 또한 지원됩니다. 예를 들면:
CREATE FUNCTION multiout_simple_setof(n 정수, OUT 정수, OUT 정수) SETOF 레코드 AS $$를 반환합니다. 반환 [(1, 2)] * n $$ 언어 plpythonu; SELECT * FROM multiout_simple_setof(3);