젠 토토 : 문서 : 9.6 : 젠 토토 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.6 : PL/스포츠 토토 사이트의 글로벌 데이터 | PostgreSQL : 문서 : 9.6 : PL/사설 토토 -사설 토토 절차 언어 | 42 장 PL/토토 결과 -토토 결과 절차 언어 | PostgreSQL : 문서 : 9.6 : PL/사설 토토 사이트의 트리거 절차 |
PL/TCL 기능 본문에서 데이터베이스에 액세스하기 위해 다음 명령을 사용할 수 있습니다.
SPI_EXEC
?-countn? ?-array이름?명령?루프 바디?문자열로 주어진 SQL 명령을 실행합니다. 명령의 오류로 인해 오류가 발생합니다.SPI_EXEC
명령에 의해 처리 된 행 수 (선택, 삽입, 업데이트 또는 삭제) 또는 명령이 유틸리티 명령문 인 경우 0이됩니다. 또한 명령이 A 인 경우select문서, 선택한 열의 값은 아래에 설명 된대로 토토 결과 변수에 배치됩니다.
선택 사항-count값이SPI_EXEC
명령에서 처리 할 최대 행 수입니다. 이것의 효과는 쿼리를 커서로 설정 한 다음 말하는 것과 비슷합니다.fetchn.
명령이 a 인 경우select문서, 결과 열의 값은 열에 명명 된 토토 결과 변수에 배치됩니다. 인 경우-어레이옵션이 주어지면 열 값은 대신에 명명 된 연관 배열의 요소에 저장되며 열 이름은 배열 인덱스로 사용됩니다. 또한 결과 내의 현재 행 번호 (0에서 카운트)가 지명 된 배열 요소에 저장됩니다.".Tupno", 해당 이름이 결과에서 열 이름으로 사용되지 않는 한.
명령이 a 인 경우select진술 및 아니오루프 바디스크립트가 제공되면 첫 번째 결과 행만 토토 결과 변수 또는 배열 요소에 저장됩니다. 나머지 행은 무시됩니다.SPI_EXEC
.) 예 :
SPI_EXEC "PG_PROC에서 CNT로 COUNT (*)를 선택하십시오
토토 결과 변수를 설정합니다$ cnt의 행 수로PG_PROC시스템 카탈로그.
선택 사항 인 경우루프-바디인수가 주어지면, 쿼리 결과에서 각 행에 대해 한 번 실행되는 토토 결과 스크립트입니다. (루프 바디주어진 명령이 A가 아닌 경우 무시됩니다select.) 현재 행 열의 값은 각 반복 전에 TCL 변수 또는 배열 요소에 저장됩니다. 예를 들어:
SPI_EXEC -ARRAY C "선택 *에서 pg_class"
모든 행에 대한 로그 메시지를 인쇄합니다PG_CLASS. 이 기능은 다른 토토 결과 루핑 구조와 유사하게 작동합니다.계속및break루프 본체 내부의 일반적인 방식으로 작업하십시오.
쿼리 결과 열이 null이면 대상 변수가"Unset"설정되지 않고.
SPI_PREPARE
쿼리 typelist나중에 실행을위한 쿼리 계획을 준비하고 저장합니다. 저장된 계획은 현재 세션의 수명 동안 유지됩니다.
쿼리는 매개 변수, 즉 계획이 실제로 실행될 때마다 값을 제공 할 자리 표시자를 사용할 수 있습니다. 쿼리 문자열에서 기호별로 매개 변수를 참조하십시오$ 1 ... $n. 쿼리가 매개 변수를 사용하는 경우 매개 변수 유형의 이름을 TCL 목록으로 제공해야합니다.typelist매개 변수가 사용되지 않은 경우.)
|SPI_PREPARE
후속 호출에서 사용할 쿼리 IDSPI_EXECP
. 보다SPI_EXECP
예를 들어.
SPI_EXECP
?-countn? ?-array이름? ?-nullsString?QueryId?Value-List? ?루프 바디?이전에 준비한 쿼리 실행SPI_PREPARE
.QueryIdid는입니다.SPI_PREPARE
. 쿼리가 매개 변수를 참조하는 경우 aValue-List제공해야합니다. 이것은 매개 변수에 대한 실제 값의 토토 결과 목록입니다.SPI_PREPARE
. 생략Value-List쿼리에 매개 변수가없는 경우.
선택적 값-nulls공백의 문자열입니다'n'캐릭터 텔링SPI_EXECP
매개 변수 중 널 값은 어떤 매개 변수입니다. 주어지면와 정확히 같은 길이를 가져야합니다.Value-List. 주어지지 않으면 모든 매개 변수 값은 Nonnull입니다.
쿼리 및 매개 변수가 지정되는 방식을 제외하고SPI_EXECP
SPI_EXEC
. 그만큼-count,-array및루프-바디옵션은 동일하며 결과 값도 동일합니다.
준비된 계획을 사용한 PL/TCL 기능의 예는 다음과 같습니다.
기능 작성 t1_count (정수, 정수) 정수를 $$로 반환합니다
우리는 주어진 쿼리 문자열 내부에 백 슬래시가 필요합니다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로그 또는 오류 메시지를 제출합니다. 가능한 레벨은Debug,log,info,통지,경고,오류및치명적.오류오류 조건을 제기합니다. 이것이 주변 TCL 코드에 의해 갇히지 않으면 오류가 호출 쿼리로 전파되어 현재 트랜잭션 또는 서브 트랜잭션이 중단됩니다.오류Command.치명적거래를 중단하고 현재 세션이 종료됩니다. (PL/TCL 기능 에서이 오류 수준을 사용해야할만한 이유는 없지만 완전성을 위해 제공됩니다.) 다른 수준은 다른 우선 순위 수준의 메시지 만 생성합니다.log_min_messagesandclient_min_messages구성 변수. 보다메이저 토토 사이트 : 문서 : 9.6 : 서버 구성andPostgreSQL : 문서 : 9.6 : PL/범퍼카 토토에서의 오류 처리자세한 내용은