윈 토토 : 문서 : 9.4 : 윈 토토 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.4 : PL/윈 토토의 글로벌 데이터 | PostgreSQL : 문서 : 9.4 : PL/무지개 토토 -무지개 토토 절차 언어 | 41 장. PL/토토 핫 -토토 핫 절차 언어 | PostgreSQL : 문서 : 9.4 : PL/토토 사이트의 트리거 절차 |
PL/TCL 기능 본문에서 데이터베이스에 액세스하기 위해 다음 명령을 사용할 수 있습니다.
SPI_EXEC
?-countn? ?-어레이이름?명령?루프 바디?문자열로 주어진 SQL 명령을 실행합니다. 명령의 오류로 인해 오류가 발생합니다. 그렇지 않으면의 반환 값SPI_EXEC
명령에 의해 처리 된 행 수 (선택, 삽입, 업데이트 또는 삭제) 또는 명령이 유틸리티 문인 경우 0이됩니다. 또한 명령이 A 인 경우select문서, 선택한 열의 값은 아래에 설명 된대로 토토 핫 변수에 배치됩니다.
선택 사항-countvalue ketsSPI_EXEC
명령에서 처리 할 최대 행 수입니다. 이것의 효과는 쿼리를 커서로 설정 한 다음 말하는 것과 비슷합니다.fetchn.
명령이 a 인 경우select문서, 결과 열의 값은 열에 명명 된 토토 핫 변수에 배치됩니다. 인 경우-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 ... $n. 쿼리가 매개 변수를 사용하는 경우 매개 변수 유형의 이름을 TCL 목록으로 제공해야합니다. (빈 목록 작성typelist매개 변수가 사용되지 않은 경우.)
반환 값SPI_PREPARE
후속 호출에서 사용되는 쿼리 ID입니다SPI_EXECP
. 보다SPI_EXECP
예를 들어.
SPI_EXECP
?-countn? ?-array이름? ?-nullsString?QueryId?Value-List? ?루프 바디?이전에 준비한 쿼리 실행SPI_PREPARE
. QueryIdid는입니다.SPI_PREPARE
. 쿼리가 매개 변수를 참조하는 경우 a15524_15536제공해야합니다. 이것은 매개 변수에 대한 실제 값의 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, 그리고 토토 핫 변수 대체로 대체되지 않았습니다.
spi_lastoid
마지막으로 삽입 된 행의 OID를 반환합니다SPI_EXEC
또는SPI_EXECP
, 명령이 단일 줄인 경우삽입및 수정 된 테이블에는 OID가 포함되어 있습니다. (그렇지 않으면 0이됩니다.)
QUOTE
String주어진 문자열에서 단일 인용문과 백 슬래시 문자의 모든 발생을 두 배로 늘립니다. 이것은 주어진 SQL 명령에 삽입 될 문자열을 안전하게 인용하는 데 사용될 수 있습니다.SPI_EXEC
또는SPI_PREPARE
. 예를 들어, SQL 명령 문자열에 대해 다음과 같이 생각하십시오.
" '$ val'을 ret as"
여기서 토토 핫 변수val실제로 포함그렇지 않음. 이로 인해 최종 명령 문자열이 발생합니다.
ret as as as as as
이 동안 구문 분석 오류가 발생합니다SPI_EXEC
또는SPI_PREPARE
. 제대로 작동하려면 제출 된 명령에는 다음이 포함되어야합니다.
선택한 'dos n't'as ret
PL/토토 핫에서 형성 될 수 있습니다 :
"선택 '[[QUOTE $ val]' 'AS RET"
하나의 이점SPI_EXECP
매개 변수는 SQL 명령 문자열의 일부로 구문 분석되지 않기 때문에 이와 같은 매개 변수 값을 인용 할 필요가 없다는 것입니다..
elog
레벨 msg로그 또는 오류 메시지를 제출합니다. 가능한 레벨은디버그, log, info, 통지, 경고, 오류및치명적. 오류오류 조건을 제기합니다. 이것이 주변 TCL 코드에 의해 갇히지 않으면 오류가 호출 쿼리로 전파되어 현재 트랜잭션 또는 서브 트랜잭션이 중단됩니다. 이것은 사실상 TCL과 동일합니다오류Command.치명적거래를 중단하고 현재 세션이 종료됩니다. (PL/TCL 기능 에서이 오류 수준을 사용해야할만한 이유는 없지만 완전성을 위해 제공됩니다.) 다른 수준은 다른 우선 순위 수준의 메시지 만 생성합니다. 특정 우선 순위의 메시지가 클라이언트에게보고되었는지, 서버 로그에 기록되었는지 또는 둘 다에 의해 제어되는지log_min_messagesandclient_min_messages구성 변수. 보다롤 토토 : 문서 : 9.4 : 서버 구성자세한 내용은