다음 명령을 사용하여 데이터베이스에 액세스할 수 있습니다 PL/Tcl 함수 본문에서:
spi_exec ?-개수n? ?-배열이름? 명령 ?루프-본문?문자열로 제공된 SQL 명령을 실행합니다. 오류
        이 명령으로 인해 오류가 발생합니다. 그렇지 않으면,
        반환 값spi_exec이다
        처리된 행 수(선택, 삽입, 업데이트,
        또는 삭제됨) 명령에 의해, 또는 명령이 다음과 같은 경우 0입니다.
        유틸리티 진술. 또한 명령이 다음과 같은 경우선택문, 값
        선택한 열은 다음과 같이 Tcl 변수에 배치됩니다.
        아래에 설명되어 있습니다.
선택사항-개수가치가 말해주는 것spi_exec최대 수
        명령에서 처리할 행 수입니다. 이것의 효과는
        쿼리를 커서로 설정한 다음
        말하는 중가져오기n.
명령이 다음과 같은 경우선택문, 결과 열의 값은 열 이름을 따서 명명된 Tcl 변수. 만약-배열옵션이 주어지면 열 값 대신 명명된 연관 배열에 저장됩니다. 배열 인덱스로 사용되는 열 이름입니다.
명령이 다음과 같은 경우선택진술 및 아니오루프-본문스크립트가 제공되면 결과의 첫 번째 행만 표시됩니다.
        Tcl 변수에 저장됩니다. 나머지 행(있는 경우)은 다음과 같습니다.
        무시되었습니다. 쿼리가 행을 반환하지 않으면 저장이 발생하지 않습니다.
        (이런 경우는 결과를 확인하면 알 수 있습니다.spi_exec.) 예:
spi_exec "SELECT count(*) AS cnt FROM pg_proc"
무지개 토토 변수를 설정합니다$cnt행의 수에pg_proc시스템 카탈로그.
선택사항인 경우루프-본문인수가 주어졌습니다. 각 행에 대해 한 번 실행되는 무지개 토토 스크립트 조각 쿼리 결과. (루프-본문주어진 경우 무시됩니다. 명령은 a가 아닙니다.선택.) 현재 행의 열 값은 Tcl에 저장됩니다. 각 반복 전의 변수. 예를 들면:
spi_exec -array C "SELECT * FROM pg_class" 
    elog DEBUG "테이블 $C(relname) 있음"
        다음의 모든 행에 대한 로그 메시지를 인쇄합니다.pg_class. 이 기능은 다음과 유사하게 작동합니다. 다른 Tcl 루핑 구성; 특히계속그리고휴식루프 본문 내에서 일반적인 방식으로 작업합니다.
쿼리 결과의 열이 null인 경우 대상은 변수는 다음과 같습니다"설정 해제"설정되지 않고.
spi_prepare 질의 유형 목록나중 실행을 위해 쿼리 계획을 준비하고 저장합니다. 는 저장된 계획은 현재의 수명 동안 유지됩니다 세션.
쿼리는 매개변수, 즉 자리 표시자를 사용할 수 있습니다. 계획이 실제로 실행될 때마다 제공되는 값 실행. 쿼리 문자열에서 매개변수를 다음으로 참조합니다. 기호$1 ... $n. 만약 쿼리는 매개변수를 사용하며 매개변수 유형의 이름은 Tcl 목록으로 제공되어야 합니다. (빈 목록 작성유형 목록매개변수가 없는 경우 사용됩니다.)
다음의 반환 값spi_prepare다음에 사용할 쿼리 ID입니다.
        후속 호출spi_execp. 참조spi_execp예를 들어.
spi_execp ?-개수n? ?-배열이름? ?-널문자열? 쿼리ID ?값 목록?
      ?루프-본문?이전에 준비된 쿼리를 실행합니다.spi_prepare. 쿼리ID다음에서 반환한 ID입니다.spi_prepare. 쿼리의 경우
        참조 매개변수, a값 목록반드시 제공되어야 합니다. 이것은
        매개변수에 대한 실제 값의 Tcl 목록입니다. 목록
        매개변수 유형 목록과 길이가 같아야 합니다.
        이전에 다음에게 주어졌습니다.spi_prepare. 생략값 목록쿼리가 없는 경우
        매개변수.
다음에 대한 선택적 값-null공백의 문자열이고'n'문자가 말하는spi_execp매개변수 중 null 값인 것은 무엇입니까? 주어진다면 반드시
        길이가 와 정확히 같습니다.값 목록. 주어지지 않으면 모두
        매개변수 값이 null이 아닙니다.
쿼리 및 해당 매개변수를 사용하는 방식을 제외하고
        지정되었습니다.spi_execp다음과 같이 작동합니다spi_exec.-개수, -배열및루프-본문옵션은 동일하며
        결과 값도 마찬가지입니다.
다음은 준비된 PL/Tcl 함수의 예입니다. 계획:
CREATE FUNCTION t1_count(정수, 정수) $$로 정수를 반환합니다.
    if ![ 정보가 존재하는 경우 GD(plan) ] 
        # 첫 번째 호출에서 저장된 계획을 준비합니다.
        GD 설정(계획) [ spi_prepare \
                "SELECT count(*) AS cnt FROM t1 WHERE num = \$1 AND num <= \$2" \
                [ 목록 int4 int4 ] ]
    spi_execp -count 1 $GD(계획) [ 목록 $1 $2 ]
    $cnt 반환
$$ 언어 pltcl;
        다음에 제공된 쿼리 문자열 내에 백슬래시가 필요합니다.spi_prepare다음을 보장하기 위해$n마커가 통과됩니다.
        에spi_prepare있는 그대로, 그렇지 않음
        무지개 토토 변수 대체으로 대체되었습니다.
spi_lastoid마지막으로 삽입된 행의 OID를 반환합니다.spi_exec또는spi_execp, 명령이 다음과 같은 경우
        단일 행삽입그리고 수정된
        테이블에 OID가 포함되어 있습니다. (그렇지 않으면 0을 얻습니다.)
인용문 문자열작은따옴표와 백슬래시 발생 횟수를 두 배로 늘립니다.
        주어진 문자열의 문자. 이렇게 하면 안전하게 사용할 수 있어요
        SQL 명령에 삽입될 인용 문자열
        에게 주어졌다spi_exec또는spi_prepare. 예를 들어,
        다음과 같은 SQL 명령 문자열을 생각해 보세요.
"'$val' AS ret 선택"
여기서 무지개 토토 변수발실제로는 다음을 포함함그렇지 않습니다. 이 최종 명령 문자열이 생성됩니다.
재개로 '하지 않음' 선택
이 과정에서 구문 분석 오류가 발생합니다.spi_exec또는spi_prepare. 제대로 작동하려면,
        제출된 명령에는 다음이 포함되어야 합니다.
재개로 '하지 않음' 선택
다음을 사용하여 PL/Tcl에서 형성될 수 있습니다.
"SELECT '[ quote $val ]' AS ret"
한 가지 장점spi_execp이렇게 매개변수 값을 인용할 필요가 없다는 점입니다.
        매개변수는 SQL의 일부로 구문 분석되지 않으므로
        명령 문자열.
elog 레벨 msg로그 또는 오류 메시지를 내보냅니다. 가능한 수준은 다음과 같습니다.디버그, 로그, 정보, 공지, 경고, 오류및치명적. 오류오류 조건을 발생시킵니다. 만약 이것이라면 주변 Tcl 코드에 의해 트랩되지 않은 오류 호출 쿼리로 전파되어 현재 거래 또는 하위 거래가 중단됩니다. 이것은 사실상 Tcl과 동일오류명령.치명적트랜잭션을 중단하고 현재 세션을 종료합니다. (아마 좋은 일은 없을 거야. PL/Tcl 함수에서 이 오류 수준을 사용하는 이유는 무엇입니까? 완전성을 위해 제공됩니다.) 다른 레벨만 다양한 우선순위 수준의 메시지를 생성합니다. 여부 특정 우선순위의 메시지는 클라이언트, 서버 로그에 기록되거나 둘 다에 의해 제어됩니다.log_min_messages그리고client_min_messages구성 변수. 참조18장더 보기 정보.