이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 42.5. PL/롤 토토에서 데이터베이스 액세스버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

37.5. PL/메이저 토토 사이트에서 데이터베이스 액세스

데이터베이스에 액세스하기 위해 다음 명령을 사용할 수 있습니다 PL/TCL 기능의 본문에서 :

SPI_EXEC?-countn? ?-array이름?명령?루프 바디?

문자열로 주어진 SQL 명령을 실행합니다. 오류 명령으로 인해 오류가 발생합니다. 그렇지 않으면 반환 값SPI_EXECIS 처리 된 행 수 (선택, 삽입, 업데이트, 또는 명령에 의해 삭제) 또는 명령이 유틸리티 진술. 또한 명령이 A 인 경우select진술, 값 선택된 열은 메이저 토토 사이트 변수 AS에 배치됩니다 아래 설명.

선택 사항-count값이SPI_EXEC최대 숫자 명령에서 처리 할 행. 이것의 효과는입니다 쿼리를 커서로 설정 한 다음 속담Fetchn.

명령이 a 인 경우select문, 결과 열의 값이 TCL 변수 열에 이름을 따서 명명되었습니다. 인 경우-array옵션은 열 값입니다 대신 이름 지정된 연관 배열에 저장됩니다 배열 인덱스로 사용 된 열 이름.

명령이 a 인 경우select진술 및 아니오루프 바디스크립트가 제공되면 첫 번째 결과 행만 메이저 토토 사이트 변수에 저장; 남은 행은 있다면 무시했습니다. 쿼리가 행을 반환하지 않으면 저장이 발생하지 않습니다. (이 경우는의 결과를 확인하여 감지 할 수 있습니다.SPI_EXEC.) 예 :

SPI_EXEC "PG_PROC에서 CNT로 COUNT (*)를 선택하십시오."

메이저 토토 사이트 변수를 설정합니다$ cnt의 행 수PG_PROC시스템 카탈로그

선택 사항 인 경우루프-바디인수가 주어지고, 그것은 a입니다 각 행에 대해 한 번 실행되는 메이저 토토 사이트 스크립트 조각 쿼리 결과. (루프-바디주어진 경우 무시됩니다 명령은 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매개 변수가없는 경우 현재 사용됩니다.) 현재 매개 변수 유형은이어야합니다 시스템에 표시된 내부 유형 이름으로 식별 테이블pg_type; 예를 들어int4notInteger.

|SPI_PREPARE사용되는 쿼리 ID입니다 후속 전화SPI_EXECP. 보다SPI_EXECP예를 들어.

SPI_EXECP?-countn? ?-array이름? ?-nullsString?QueryId?Value-List? ?루프 바디?

이전에 준비한 쿼리 실행SPI_PREPARE. QueryIdid는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_PREPAREas-is 메이저 토토 사이트 변수 대체로 대체.

spi_lastoid

마지막으로 삽입 된 행의 OID를 반환합니다SPI_EXEC또는SPI_EXECP, 명령이 a 싱글 로우삽입및 수정 테이블에는 OID가 포함되어 있습니다. (그렇지 않으면 0이됩니다.)

QUOTE String

단일 인용구와 백 슬래시의 모든 발생을 두 배로 늘립니다 주어진 문자열의 문자. 이것은 안전하게 사용될 수 있습니다 SQL 명령에 삽입 될 인용 문자열 주어진SPI_EXEC또는SPI_PREPARE. 예를 들어, SQL 명령 문자열과 같은에 대해 생각하십시오.

" '$ val'을 ret as"

여기서 메이저 토토 사이트 변수val실제로 포함그렇지 않음. 이것 최종 명령 문자열을 초래할 것입니다

선택한 'do n't'as as ret

이 동안 구문 분석 오류가 발생합니다SPI_EXEC또는SPI_PREPARE. 제대로 작동하려면 제출 된 명령이 포함되어야합니다

선택한 'dos ​​n't''t'로 ret

PL/메이저 토토 사이트에서 형성 될 수 있습니다

" '[QUOTE $ val]' 'AS RET" 선택

하나의 장점SPI_EXECP이와 같은 매개 변수 값을 인용 할 필요가 없다는 것입니다. 매개 변수는 SQL의 일부로 구문 분석되지 않으므로 명령 문자열.

elog 레벨 MSG

로그 또는 오류 메시지를 방출합니다. 가능한 레벨은디버그, log, info, 통지, 경고, 오류치명적. 오류오류 조건을 제기합니다. 이것이 있다면 주변 TCL 코드에 갇히지 않으면 오류가 발생합니다 호출 쿼리로 전파되어 전류가 발생합니다 중단 될 트랜잭션 또는 하위 변환. 이것은 효과적으로 TCL과 동일합니다오류명령.치명적거래를 중단하고 원인 현재 세션 종료. (아마도 좋지 않을 것입니다 PL/TCL 기능 에서이 오류 수준을 사용하는 이유이지만 완전성을 위해 제공됩니다.) 다른 수준 만 다른 우선 순위 수준의 메시지를 생성합니다. 이든 특정 우선 순위의 메시지는 다음에보고됩니다 서버 로그에 작성된 클라이언트 또는 둘 다 그만큼log_min_messagesandclient_min_messages구성 변수. 보다17 장더 많은 것 정보.