pl/윈 토토은 당신이 쓰다PostgreSQL기능 그만큼윈 토토 프로그래밍 언어.
PL/윈 토토을 사용하는 일반적인 장점은 이것이 사용할 수 있다는 것입니다. 저장된 함수 내에서 많은"String Munging"사용 가능한 연산자 및 기능 윈 토토의 경우. 윈 토토을 사용하는 복잡한 문자열을 구문 분석하는 것이 더 쉬울 수 있습니다 문자열 함수 및 제어 구조보다 pl/pgsql에서 제공
특정 데이터베이스에 pl/윈 토토을 설치하려면Createlang Pl윈 토토dbname.
팁 :언어가 설치된 경우template1, 모든 후속 데이터베이스 언어가 자동으로 설치됩니다.
참고 :소스 패키지 사용자는 특별히해야합니다 설치 프로세스 중에 PL/윈 토토 빌드를 활성화하십시오. (참조PostgreSQL : 문서 : 8.1 : 토토 사이트 순위 지침더 많은 정보.) 이진 패키지 사용자는 pl/윈 토토을 찾을 수 있습니다 별도의 하위 포장.
13153_13222PostgreSQL : 문서 : 8.1 : 토토 사이트 순위 만들기구문 :
함수 만들기funcName(Argument-Types) 반환return-type$$ # pl/윈 토토 기능 본체 $$ 언어 pl윈 토토;
함수의 본문은 일반적인 윈 토토 코드입니다. 사실, PL/윈 토토 접착제 코드는 윈 토토 서브 루틴 안에 랩핑됩니다. pl/윈 토토 함수는 항상 스칼라 값을 반환해야합니다. 당신은 더 많은 것을 반환 할 수 있습니다 a 아래에 설명 된 바와 같이 참조. 목록을 반환하지 마십시오.
참고 :명명 된 중첩 서브 루틴의 사용은 다음과 같습니다 특히 어휘를 언급하는 경우 Perl에서 위험합니다 동봉 범위의 변수. pl/윈 토토이기 때문에 기능은 서브 루틴 (Subroutine)으로 래핑됩니다 당신은 만들어 져 있습니다. 일반적으로 훨씬 안전합니다 Coderef를 통해 부르는 익명의 서브 루틴을 만듭니다. 참조윈 토토diag더 많은 사람 페이지 세부.
의 구문함수 만들기명령은 함수 본체가 문자열로 쓰여져야합니다. 끊임없는. 일반적으로 달러 인용문을 사용하는 것이 가장 편리합니다 (보다섹션 4.1.2.214732_14872') 및 백 슬래시 (\) 함수 본문에 사용 일반적으로 두 배가되어 (참조섹션 4.1.2.1).
인수와 결과는 다른 윈 토토에서와 같이 처리됩니다. 서브 루틴 : 논쟁이 통과되었습니다@_, 결과 값은로 반환됩니다.return또는 마지막 표현식으로 함수에서 평가.
예를 들어, 두 정수 중 더 큰 것을 반환하는 함수 값은 다음과 같이 정의 될 수 있습니다.
함수 생성 윈 토토_max (정수, 정수) 정수를 $$로 반환합니다 if ($ _ [0] $ _ [1]) return $ _ [0]; 반환 $ _ [1]; $$ 언어 pl윈 토토;
SQL 널 값인 경우is
함수로 전달되면 인수 값이로 나타납니다."정의되지 않은"Perl. 위
함수 정의는 NULL과 잘 어울리지 않습니다
입력 (실제로는 제로 인 것처럼 작용합니다). 우리
추가 할 수 있습니다엄격한함수에
정의PostgreSQL더 합리적인 일을하십시오 : 널 값이 전달되면
함수는 전혀 호출되지 않지만 널을 반환합니다.
결과를 자동으로. 또는 우리는 확인할 수 있습니다
기능 본문의 정의되지 않은 입력. 예를 들어, 가정하십시오
우리가 원했던윈 토토_max
하나
무시 무시한 인수를 반환하기위한 NULL과 하나의 unnull 인수,
널 가치보다는 :
함수 생성 윈 토토_max (정수, 정수)는 정수를 $$로 반환합니다 내 ($ x, $ y) = @_; if (! 정의 $ x) if (! 정의 $ y) return undef; 반품 $ y; if (! 정의 $ y) return $ x; if ($ x $ y) return $ x; 반품 $ y; $$ 언어 pl윈 토토;
위와 같이, pl/윈 토토에서 SQL NULL 값을 반환하려면 함수, 정의되지 않은 값을 반환하십시오. 이것은 할 수 있습니다 함수는 엄격하거나 그렇습니다.
윈 토토이 반환 할 수 있습니다PostgreSQL펄 어레이에 대한 참조로서 배열. 예는 다음과 같습니다.
함수 생성 또는 교체 returns_array () 텍스트 [] []를 $$로 반환합니다 반환 [[ 'A "B', 'C, D'], [ 'e \\ f', 'g']]; $$ 언어 pl윈 토토; returns_array (); 선택
복합 유형 인수는 다음과 같은 함수로 전달됩니다 해시에 대한 참조. 해시의 키는 속성입니다 복합 유형의 이름. 예는 다음과 같습니다.
테이블 직원 만들기 ( 이름 텍스트, 기본 정수, 보너스 정수 ); Function Empcomp (Employee)는 정수를 $$로 반환합니다 내 ($ emp) = @_; return $ emp- basesalary + $ emp- 보너스; $$ 언어 pl윈 토토; 직원의 이름, Empcomp (Employee.*)를 선택하십시오.
PL/윈 토토 기능은 복합 유형 결과를 사용하여 반환 할 수 있습니다 동일한 접근법 : 필요한 속성. 예를 들어,
TestRowperl 유형 생성 (F1 Integer, F2 Text, F3 Text); function perl_row ()를 작성하거나 바꾸십시오 return f2 = 'hello', f1 = 1, f3 = 'world'; $$ 언어 pl윈 토토; perl_row ();에서 *를 선택하십시오.
신고 된 결과 데이터 유형의 모든 열은 해시에있는 것은 널로 반환됩니다.
pl/윈 토토 함수는 스칼라 또는
복합 유형. 일반적으로 a에서 행을 반환하고 싶을 것입니다
시간, 시작 시간 속도를 높이고 대기열을 유지하는 시간
메모리에서 전체 결과를 설정합니다. 당신은로 이것을 할 수 있습니다.return_next
아래 그림과 같이.
마지막으로return_next
, 당신은 둘 중 하나를 넣어야합니다return또는 (더 나은)반환
undef.
함수 생성 또는 교체 perl_set_int (int) 정수를 $$로 반환합니다 foreach (0 .. $ _ [0]) return_next ($ _); Undef를 반환하십시오. $$ 언어 pl윈 토토; perl_set_int (5)에서 *를 선택하십시오. 함수 생성 또는 교체 perl_set () setof testrowperl을 $$로 반환합니다 return_next (f1 = 1, f2 = 'hello', f3 = 'world'); return_next (f1 = 2, f2 = 'hello', f3 = 'postgresql'); return_next (f1 = 3, f2 = 'hello', f3 = 'pl/윈 토토'); Undef를 반환하십시오. $$ 언어 pl윈 토토;
소규모 결과 세트의 경우 참조를 반환 할 수 있습니다. 스칼라, 배열에 대한 참조, 또는 간단한 유형, 배열 유형 및 복합 유형. 다음은 몇 가지 간단한 예입니다 전체 결과 세트를 배열로 반환합니다. 참조 :
함수 생성 또는 교체 perl_set_int (int) 정수를 $$로 반환합니다. 반환 [0 .. $ _ [0]]; $$ 언어 pl윈 토토; perl_set_int (5)에서 *를 선택하십시오. function perl_set ()을 setsof testrowperl로 $$로 반환합니다. 반품 [ f1 = 1, f2 = 'hello', f3 = 'world', f1 = 2, f2 = 'hello', f3 = 'postgresql', f1 = 3, f2 = 'hello', f3 = 'pl/윈 토토' ]; $$ 언어 pl윈 토토; perl_set ();에서 *를 선택하십시오.
pl/윈 토토현재는 그렇지 않습니다 도메인 유형에 대한 완전한 지원 : 도메인을 동일하게 처리합니다. 기본 스칼라 유형으로. 이것은 제약을 의미합니다 도메인과 관련된 것은 시행되지 않습니다. 이것은 아닙니다 기능 인수에 대한 문제이지만 선언하는 경우 위험입니다. 에이pl/윈 토토도메인 유형 반환.
사용하려면엄격한코드와 함께 Pragma, 가장 쉬운 방법은입니다.SET pl윈 토토.use_stricttrue. 이 매개 변수 후속 편집에 영향을 미칩니다pl/윈 토토함수이지만 함수는 없습니다 현재 세션에서 이미 컴파일되었습니다. 매개 변수를 설정합니다 전에pl/윈 토토로드, 추가해야합니다"pl윈 토토"to thecustom_variable_classesList inpostgresql.conf.
다른 방법엄격한Pragma는 put입니다.
Strict 사용;
함수 본문에서.