이 섹션에서는 괄호 대신 물음표를 사용하는 일반적인 TCL 규칙을 따라 구문 시놉시스의 선택적 요소를 나타냅니다. PL/TCL 기능 본문에서 데이터베이스에 액세스하기 위해 다음 명령을 사용할 수 있습니다.
SPI_EXEC
?-countn
? ?-어레이이름
?명령
?루프 바디
?
문자열로 주어진 SQL 명령을 실행합니다. 명령의 오류로 인해 오류가 발생합니다. 그렇지 않으면의 반환 값SPI_EXEC
명령에 의해 처리 된 행 수 (선택, 삽입, 업데이트 또는 삭제) 또는 명령이 유틸리티 문인 경우 0이됩니다. 또한 명령이 A 인 경우select
문서, 선택한 열의 값은 아래에 설명 된대로 롤 토토 변수에 배치됩니다.
선택 사항-count
값이SPI_EXEC
한 번 중지하려면n
쿼리에 a가 포함 된 것처럼 행이 검색되었습니다.Limit
절. 만약에n
| 쿼리가 완료됩니다.-count
생략.
명령이 a 인 경우select
문서, 결과 열의 값은 열에 이름을 따서 명명 된 tcl 변수에 배치됩니다. 인 경우-array
옵션이 제공되면 열 값은 대신에 명명 된 연관 배열의 요소에 저장되며 열 이름은 배열 인덱스로 사용됩니다. 또한 결과 내의 현재 행 번호 (0에서 카운트)가 지명 된 배열 요소에 저장됩니다.“.Tupno
”, 해당 이름이 결과에서 열 이름으로 사용되지 않는 한.
명령이 a 인 경우select
진술 및 아니오루프 바디
스크립트가 주어지면 첫 번째 행만이 롤 토토 변수 또는 배열 요소에 저장됩니다. 나머지 행은 무시됩니다. 쿼리가 행을 반환하지 않으면 저장이 발생하지 않습니다. (이 경우는의 결과를 확인하여 감지 할 수 있습니다.SPI_EXEC
.) 예 :
SPI_EXEC "PG_PROC에서 CNT로 COUNT (*)를 선택하십시오."
롤 토토 변수를 설정합니다$ cnt
의 행 수PG_PROC
시스템 카탈로그.
선택 사항 인 경우루프 바디
인수가 주어지면, 쿼리 결과에서 각 행에 대해 한 번 실행되는 롤 토토 스크립트입니다. (루프 바디
주어진 명령이 A가 아닌 경우 무시됩니다select
.) 현재 행 열의 값은 각 반복 전에 TCL 변수 또는 배열 요소에 저장됩니다. 예를 들어:
SPI_EXEC -ARRAY C "선택 *에서 pg_class" Elog Debug "Table $ C (Relname)가 있습니다.
모든 행에 대한 로그 메시지를 인쇄합니다PG_CLASS
. 이 기능은 다른 롤 토토 루핑 구조와 유사하게 작동합니다. 특히계속
andbreak
루프 본체 내부의 일반적인 방식으로 작업하십시오.
쿼리 결과 열이 null이면 대상 변수가“Unset”설정되지 않고.
SPI_PREPARE
쿼리
typelist
나중에 실행을위한 쿼리 계획을 준비하고 저장합니다. 저장된 계획은 현재 세션의 수명 동안 유지됩니다.
쿼리는 매개 변수, 즉 계획이 실제로 실행될 때마다 값을 제공 할 자리 표시자를 사용할 수 있습니다. 쿼리 문자열에서 기호별로 매개 변수를 참조하십시오$ 1
... $
. 쿼리가 매개 변수를 사용하는 경우 매개 변수 유형의 이름을 TCL 목록으로 제공해야합니다. (빈 목록 작성n
typelist
매개 변수가 사용되지 않은 경우.)
반환 값에서SPI_PREPARE
후속 호출에서 사용할 쿼리 ID입니다SPI_EXECP
. 보다SPI_EXECP
예를 들어.
SPI_EXECP
?-countn
? ?-array이름
? ?-nullsString
?QueryId
?Value-List
? ?루프 바디
?
이전에 준비한 쿼리 실행SPI_PREPARE
. QueryId
id는SPI_PREPARE
. 쿼리가 매개 변수를 참조하는 경우 aValue-List
제공해야합니다. 이것은 매개 변수에 대한 실제 값의 tcl 목록입니다. 목록은 이전에 주어진 매개 변수 유형 목록과 동일한 길이 여야합니다.SPI_PREPARE
. 생략Value-List
쿼리에 매개 변수가없는 경우.
선택적 값-nulls
공백의 문자열 및'n'
캐릭터 텔링SPI_EXECP
매개 변수 중 널 값은 어떤 매개 변수입니다. 주어지면와 정확히 같은 길이를 가져야합니다.Value-List
. 주어지지 않으면 모든 매개 변수 값은 Nonnull입니다.
쿼리 및 매개 변수가 지정되는 방식을 제외하고SPI_EXECP
SPI_EXEC
. 그만큼-count
, -array
및루프 바디
옵션은 동일하며 결과 값도 동일합니다.
준비된 계획을 사용한 PL/TCL 기능의 예는 다음과 같습니다.
함수 만들기 t1_count (정수, 정수)는 정수를 $$로 반환합니다 ! [정보가 gd (plan)] 가 있다면 # 첫 번째 통화에 저장된 계획을 준비합니다 GD 설정 (계획) [SPI_PREPARE \ "num = \ $ 1, num <= \ $ 2"\에서 cnt로 cnt (*)를 선택하십시오. [List Int4 Int4]] SPI_EXECP -COUNT 1 $ gd (계획) [목록 $ 1 $ 2] $ CNT를 반환합니다 $$ 언어 pltcl;
우리는 주어진 쿼리 문자열 내부에 백 슬래시가 필요합니다SPI_PREPARE
$
마커가 통과됩니다.n
SPI_PREPARE
as-is, 그리고 롤 토토 변수 대체로 대체되지 않았습니다.
SubTransaction
명령
롤 토토 스크립트에 포함 된명령
는 SQL Subtransaction 내에서 실행됩니다. 스크립트가 오류를 반환하면 오류를 주변 TCL 코드로 반환하기 전에 해당 전체 하위 트랜잭션이 롤백됩니다. 보다PostgreSQL : 문서 : 13 : 43.9. PL/토토 사이트 순위에서의 명시 적 차축자세한 내용과 예는
QUOTE
String
주어진 문자열에서 단일 인용문과 백 슬래시 문자의 모든 발생을 두 배로 늘립니다. 이것은 주어진 SQL 명령에 삽입 될 문자열을 안전하게 인용하는 데 사용될 수 있습니다.SPI_EXEC
또는SPI_PREPARE
. 예를 들어, SQL 명령 문자열에 대해 다음과 같이 생각하십시오.
" '$ val'을 ret as"
여기서 롤 토토 변수val
실제로 포함그렇지 않음
. 이로 인해 최종 명령 문자열이 발생합니다.
선택한 'do n't'as as ret
이 동안 구문 분석 오류가 발생합니다SPI_EXEC
또는SPI_PREPARE
. 제대로 작동하려면 제출 된 명령에는 다음이 포함되어야합니다.
선택한 'does n't'as at ret
pl/롤 토토에서 형성 될 수 있습니다 :
"선택 '[QUOTE $ val]' 'AS RET"
하나의 이점SPI_EXECP
매개 변수는 SQL 명령 문자열의 일부로 구문 분석되지 않기 때문에 이와 같은 매개 변수 값을 인용 할 필요가 없다는 것입니다..
elog
레벨
msg
로그 또는 오류 메시지를 방출합니다. 가능한 레벨은디버그
, log
, info
, 통지
, 경고
, 오류
및치명적
. 오류
오류 조건을 제기합니다. 이것이 주변 TCL 코드에 의해 갇히지 않으면 오류가 호출 쿼리로 전파되어 현재 트랜잭션 또는 서브 트랜잭션이 중단됩니다. 이것은 사실상 TCL과 동일합니다오류
명령.치명적
거래를 중단하고 현재 세션이 종료됩니다. (PL/TCL 기능 에서이 오류 수준을 사용해야할만한 이유는 없지만 완전성을 위해 제공됩니다.) 다른 수준은 다른 우선 순위 수준의 메시지 만 생성합니다. 특정 우선 순위의 메시지가 클라이언트에게보고되었는지, 서버 로그에 기록되었는지 또는 둘 다에 의해 제어되는지log_min_messagesandclient_min_messages구성 변수. 보다사설 토토 사이트 : 문서 : 13 : 19 장. 서버 구성andPostgreSQL : 문서 : 13 : 43.8. PL/토토 캔에서의 오류 처리자세한 내용은
문서에 올바른 것이없는 것이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면