inPostgres, 하나 그리고 동일합니다 함수 이름은 논쟁의 수 또는 유형이 다릅니다. 이것은 충돌합니다 사설 토토 사이트 절차 이름. pl/사설 토토 사이트에서 동일한 유연성을 제공합니다 내부 사설 토토 사이트 절차 이름에는 프로 시저 PG_PROC ROW 이름의 일부로. 따라서 다릅니다 ArgType 버전의Postgres사설 토토 사이트에 대해 함수가 다릅니다 도.
pl/사설 토토 사이트 언어로 함수를 만들려면 알려진 것을 사용하십시오. 통사론
기능 만들기funcName Argument-Types) 반환return-typeas ' # pl/사설 토토 사이트 기능 본문 '언어'pl사설 토토 사이트 ';쿼리 에서이 함수를 호출 할 때 인수는 다음과 같습니다. tcl 절차 본문에 변수 $ 1 ... $ n으로 제공됩니다. 그래서 조금 두 개의 int4 값 중 높이를 반환하는 최대 기능은 다음과 같습니다. 생성 :
함수 만들기 tcl_max (int4, int4)는 int4를 다시 반환합니다. if $ 1 $ 2 return $ 1 $ 2를 반환합니다 '언어'pltcl ';복합 유형 인수는 TCL로 절차에 제공됩니다. 배열. 배열의 요소 이름은 속성 이름입니다. 복합 유형. 실제 행의 속성에 NULL이있는 경우 값, 배열에는 나타나지 않습니다! 다음은 다음과 같습니다 OverPaid_2 함수를 정의합니다 (이전의 경우Postgres문서) PL/사설 토토 사이트
함수 생성 OverPaid_2 (EMP) BOOL을 반환합니다. if 200000.0 <$ 1 (급여) "T"반환 if $ 1 (Age) <30 && 100000.0 <$ 1 (Salary) "T"반환 "F"반환 '언어'pl사설 토토 사이트 ';
때때로 (특히 설명 된 SPI 기능을 사용할 때 나중에) 보유 된 전역 상태 데이터를 갖는 것이 유용합니다. 절차에 대한 두 호출 사이. 모든 PL/TCL 절차가 실행되었습니다 하나의 백엔드는 동일한 안전한 TCL 통역사를 공유합니다. 보호를 돕기 위해 PL/TCL 절차 부작용에서 배열을 사용할 수 있습니다. upvar 명령을 통한 각 절차. 이것의 글로벌 이름 변수는 내부 이름이고 로컬 이름은 절차입니다. GD.
트리거 절차가에 정의되어 있습니다.Postgres인수가없는 함수와 a 불투명의 반환 유형. PL/사설 토토 사이트 언어도 있습니다.
트리거 관리자의 정보는 다음 변수의 절차 본문 :
생성 트리거에서 트리거의 이름 성명.
트리거 절차를 일으킨 테이블의 객체 ID 불러야한다.
테이블 필드 이름의 사설 토토 사이트 목록 비어 있습니다. 목록 요소. 그래서 목록에서 요소 이름을 찾고 lsearch 사설 토토 사이트 명령은 동일한 양수를 반환합니다 PG_ATTRIBUTE에서 필드가 번호가 매겨 지므로 1에서 시작합니다. 시스템 카탈로그.
이벤트에 따라 전후에 문자열 트리거 콜.
이벤트에 따라 문자열 행 또는 명령문 트리거 콜.
이벤트에 따라 문자열 삽입, 업데이트 또는 삭제 방아쇠 통화의.
새 테이블 행의 값을 포함하는 배열 on 작업 삽입/업데이트 또는 삭제에서 비워
오래된 테이블 행의 값을 포함하는 배열 작업 업데이트/삭제 또는 삽입물에서 빈
위에서 설명한대로 글로벌 상태 데이터 배열.
트리거 문을 만듭니다. 논쟁은 또한 액세스 할 수 있습니다 절차 기관의 $ 1 ... $ n.
트리거 프로 시저의 리턴 값은 문자열 중 하나입니다. 확인 또는 건너 뛰거나 '배열 get'사설 토토 사이트 명령에서 반환 된 목록. 반환 값이 정상이면 정상 작업입니다 (삽입/업데이트/삭제)이 트리거를 해고 한 결과가 발생합니다. 분명히 Skip은 트리거 관리자에게 조용히 억제하도록 지시합니다. 작업. '배열 get'의 목록은 pl/사설 토토 사이트에게 대신 삽입 될 트리거 관리자로 수정 된 행 $ 새로 제공되는 것 (삽입/업데이트 만). 말할 것도없이 이 모든 것이 방아쇠가 전후에있을 때만 의미가 있습니다. 열.
정수를 강요하는 작은 예제 트리거 절차가 있습니다. 업데이트의 #을 추적하기위한 테이블의 가치 행에서 수행되었습니다. New Row가 삽입 된 경우 값은입니다 0으로 초기화 한 다음 모든 업데이트에서 증가했습니다 작업:
함수 만들기 trigfunc_modcount ()는 불투명 한 반환 ' 스위치 $ tg_op 삽입 새 ($ 1) 0을 설정하십시오 업데이트 새로 설정 ($ 1) $ old ($ 1) 새로운 새로운 ($ 1) 기본 OK를 반환합니다 반환 [배열이 새로워지기] '언어'pltcl '; 테이블 mytab (num int4, modcnt int4, desc 텍스트)을 작성합니다. mytab에 삽입하거나 업데이트하기 전에 trigger trig_mytab_modcount를 만듭니다 각 행마다 실행 절차 trigfunc_modcount ( 'modcnt');
다음 명령은 데이터베이스에 액세스 할 수 있습니다. PL/TCL 절차의 본문 :
로그 메시지를 발사하십시오. 가능한 레벨은 통지, 경고, 오류, 치명적, 디버그 및 무인처럼elogC 함수.
단일 견적 및 백 슬래시의 모든 발생을 복제합니다 캐릭터. 변수가 사용될 때 사용해야합니다. 주어진 쿼리 문자열SPI_EXEC또는SPI_PREPARE(값 목록이 아님 에SPI_EXECP). 쿼리에 대해 생각하십시오 like
" '$ val'을 ret as"사설 토토 사이트 변수 VAL에 실제로 "그렇지 않음"이 포함되어 있습니다. 이것 최종 쿼리 문자열을 초래할 것입니다
"선택 '하지 말아'ret '동안 구문 분석 오류를 일으키는 원인SPI_EXEC또는SPI_PREPARE. 그것 포함해야합니다
"선택한 'dis'dos '로 ret'
"선택 '[[QUOTE $ val]' 'AS RET"
쿼리를 위해 Parser/Planner/Optimizer/Executor에 전화하십시오. 그만큼 선택적 -수수 값이SPI_EXEC쿼리에서 처리 할 최대 행 수.
쿼리가 select 문이고 선택 사항 인 경우 루프 바디 (Foreach 문과 같은 TCL 명령의 본문) 주어지면 선택된 각 행에 대해 평가되고 동작합니다. 계속/break에 예상되는 것처럼. 선택된 필드의 값 열 이름으로 명명 된 변수에 넣습니다. 그래서 A
SPI_EXEC "PG_PROC에서 CNT로 COUNT (*)를 선택하십시오변수 $ cnt를 PG_PROC 시스템 카탈로그. 옵션 -ARRAY가 제공되면 열이 있습니다 값은 '이름'이라는 이름의 연관 배열에 저장됩니다. 개별 변수 대신 열 이름.
SPI_EXEC -ARRAY C "선택 *에서 pg_class" Elog Debug "Table $ C (Relname)가 있습니다.PG_CLASS의 모든 행에 대한 디버그 로그 메시지를 인쇄합니다. 그만큼 반환 값SPI_EXEC는 수입니다 글로벌 변수에서 찾은대로 쿼리에 의해 영향을받는 행 spi_proced.
나중에 실행을위한 쿼리 계획을 준비하고 저장합니다. 그것은입니다 계획이 Toplevel 메모리 컨텍스트에 자동으로 복사되었습니다. 따라서, 현재 저축하지 않고 계획을 준비 할 방법이 없습니다. 그것.
쿼리 참조 인수 인 경우 유형 이름은 TCL 목록으로 제공됩니다. spi_prepare의 반환 값은 a입니다 SPI_EXECP에 대한 후속 호출에서 사용할 쿼리 ID. 보다 샘플 용 SPI_EXECP.
변수와 함께 SPI_PREPARE에서 준비된 계획을 실행합니다 치환. 선택적 -Count 값은 spi_execp를 알려줍니다 쿼리에서 처리 할 최대 행 수.
-nulls의 선택적 값은 공백의 문자열이며 'n'입니다. spi_execp에게 말하는 문자는 어떤 값이 null이라고 말하는지. 만약에 주어진 것은 정확히 수의 길이를 가져야합니다. 값.
QueryId는 SPI_PREPARE CALL에 의해 반환 된 ID입니다.
SPI_PREPARE에 주어진 타이틀리스트가있는 경우 TCL 목록 정확히 같은 길이의 값은 spi_execp에 제공되어야합니다. 쿼리 후. SPI_PREPARE의 유형 목록이 비어 있으면 이 주장은 생략되어야합니다.
쿼리가 select 문인 경우 설명 된 것과 동일합니다. SPI_EXEC의 경우 루프 바디 및 변수에 대해 발생합니다. 선택된 필드.
준비된 것을 사용하여 PL/사설 토토 사이트 기능의 예입니다. 계획:
함수 만들기 t1_count (int4, int4)는 int4를 다시 반환합니다. ! [정보가 gd (plan)] 가 있다면 # 첫 번째 통화에 저장된 계획을 준비합니다 GD 설정 (계획) [SPI_PREPARE \\ "num = \\ $ 1, num <= \\ $ 2"\\에서 cnt로 cnt (*)를 선택하십시오. int4] SPI_EXECP -COUNT 1 $ gd (계획) [목록 $ 1 $ 2] $ CNT를 반환합니다 '언어'pltcl ';TCL이보아야 할 각 백 슬래시는 두 배가되어야합니다. 메인 파서가 프로세스하기 때문에 함수 생성 쿼리에서 생성 기능에도 백 슬래시. 주어진 쿼리 문자열 내부 SPI_PREPARE에게 매개 변수를 표시하려면 실제로 달러 표시가되어야합니다. 위치와 $ 1의 가치로 대체되지 않도록 첫 번째 기능 호출.
pl/사설 토토 사이트은 자주 사용되는 것들에 대한 특별한 지원을 가지고 있습니다. 그것 pl사설 토토 사이트_modules와 pl사설 토토 사이트_modfuncs의 두 마법 테이블을 인식합니다. 이들이 존재하면 '알 수없는'모듈이 창조 직후 통역사. 알려지지 않은 사설 토토 사이트 일 때마다 절차가 호출되고, 알 수없는 Proc는 절차는 모듈 중 하나에 정의됩니다. 이것이 사실이라면 모듈은 주문형으로로드됩니다. 이 동작을 가능하게하기 위해 PL/사설 토토 사이트 호출 핸들러는 컴파일해야합니다 -dpl사설 토토 사이트_unknown_support set.
이 테이블을 소스를 포함한 PL/사설 토토 사이트 소스의 모듈 서브 디렉토리 처음에 설치 해야하는 알 수없는 모듈의 경우