이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.postgresql : 문서 : 17 : 토토 사이트 추천버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

롤 토토

이름

롤 토토 -- 명령 실행

시놉시스

int 롤 토토(const char *명령, 부울읽기 전용, 긴개수)

설명

롤 토토다음을 실행합니다. 다음에 대해 지정된 SQL 명령개수행. 만일읽기 전용is, 명령은 읽기 전용이어야 하며 실행되어야 합니다. 오버헤드가 다소 감소합니다.

이 함수는 연결된 기기에서만 호출할 수 있습니다. 절차.

만약개수0이면 명령 적용되는 모든 행에 대해 실행됩니다. 만일개수0보다 크고 그 이하개수행이 검색됩니다. a를 추가하는 것과 마찬가지로 개수에 도달하면 실행이 중지됩니다.한도절을 쿼리에 추가합니다. 에 대한 예

롤 토토("SELECT * FROM foo", true, 5);

테이블에서 최대 5개의 행을 검색합니다. 다음과 같은 점에 유의하십시오. 제한은 명령이 실제로 행을 반환하는 경우에만 유효합니다. 예를 들어,

롤 토토("INSERT INTO foo SELECT * FROM bar", false, 5);

다음의 모든 행을 삽입합니다., 무시하고개수매개변수. 그러나, 와 함께

롤 토토("INSERT INTO foo SELECT * FROM 바 RETURNING *", false, 5);

실행이 중지되므로 최대 5개의 행이 삽입됩니다. 다섯 번째 이후돌아오는 중결과 행은 다음과 같습니다. 검색되었습니다.

하나의 문자열에 여러 명령을 전달할 수 있지만 나중에 명령은 이전에 객체를 생성한 것에 의존할 수 없습니다. 문자열(전체 문자열이 구문 분석되고 계획되기 때문) 실행이 시작되기 전에.롤 토토명령에 대한 결과를 반환합니다. 마지막으로 실행되었습니다.개수한도 적용 각 명령에 개별적으로 적용됩니다(마지막 결과만 실제로 반환됩니다). 숨겨진 항목에는 제한이 적용되지 않습니다. 규칙에 의해 생성된 명령입니다.

언제읽기 전용is거짓, 롤 토토명령 카운터를 증가시키고 새로운 것을 계산합니다스냅샷각 명령을 실행하기 전에 문자열. 현재 스냅샷은 실제로 변경되지 않습니다. 트랜잭션 격리 수준은직렬화 가능또는반복 가능 읽기하지만읽어 커밋됨모드 스냅샷 업데이트를 통해 각 명령이 다음의 결과를 볼 수 있습니다. 다른 세션에서 새로 커밋된 트랜잭션입니다. 이것은 명령이 수정될 때 일관된 동작을 위해 필수적입니다. 데이터베이스.

언제읽기 전용is, 롤 토토스냅샷이나 명령 카운터를 업데이트하지 않으며, 일반만 허용합니다.선택명령을 내립니다. 명령 문자열에 나타납니다. 명령은 다음을 사용하여 실행됩니다. 주변 쿼리에 대해 이전에 설정된 스냅샷입니다. 이 실행 모드는 읽기/쓰기 모드보다 다소 빠릅니다. 명령별 오버헤드를 제거합니다. 또한 진정으로 허용합니다안정적빌드할 함수: 이후 연속적인 실행은 모두 동일한 스냅샷을 사용하게 됩니다. 결과에 변화가 없을 것입니다.

읽기 전용과 읽기-쓰기를 혼합하는 것은 일반적으로 현명하지 않습니다. SPI를 사용하는 단일 기능 내의 명령; 그로 인해 발생할 수 있는 매우 혼란스러운 동작입니다. 읽기 전용 쿼리는 그렇지 않기 때문입니다. 읽기-쓰기로 수행된 데이터베이스 업데이트 결과를 확인하세요. 쿼리.

(마지막) 명령이 수행된 실제 행 수 실행된 내용은 전역 변수에 반환됩니다.SPI_처리됨. 함수의 반환값인 경우 이다SPI_OK_SELECT, SPI_OK_INSERT_RETURNING, SPI_OK_DELETE_RETURNING또는SPI_OK_UPDATE_RETURNING, 그러면 다음을 사용할 수 있습니다. 전역 포인터SPITuple테이블 *SPI_tuptable결과 행에 액세스합니다. 일부 유틸리티 명령(예:설명)도 반환 행 세트 및SPI_tuptable포함됩니다 이 경우의 결과도 마찬가지입니다.

구조SPITupleTable이다 다음과 같이 정의됩니다:

typedef 구조체

    MemoryContext tuptabcxt;    /* 결과 테이블의 메모리 컨텍스트 */
    uint32가 할당되었습니다.        /* 할당된 값의 수 */
    uint32 무료;           /* 사용 가능한 값의 수 */
    TupleDesc tupdesc;        /* 행 설명자 */
    HeapTuple *vals;           /* 행 */
 SPITupleTable;

발스다음에 대한 포인터 배열입니다. 행. (유효한 항목 수는 다음과 같습니다.SPI_processed.) tupdesc는 전달할 수 있는 행 설명자입니다. 행을 다루는 SPI 함수에.tuptabcxt, 할당됨무료내부 필드는 SPI 호출자가 사용하도록 의도되지 않았습니다.

SPI_finish모두 해제SPITupleTable15629_15761SPI_freetuptable.

인수

상수 문자 *명령

실행할 명령이 포함된 문자열

부울읽기 전용

읽기 전용의 경우 실행

개수

반환할 최대 행 수 또는0제한 없음

반환 값

명령 실행이 성공했다면 다음 중 하나가 됩니다. 다음(음수가 아닌) 값이 반환됩니다.

SPI_OK_SELECT

if a선택(그러나 아님선택)이 실행되었습니다

SPI_OK_SELINTO

if a선택이었음 실행됨

SPI_OK_INSERT

만약삽입처형되었습니다

SPI_OK_DELETE

if a삭제처형되었습니다

SPI_OK_UPDATE

만일업데이트처형되었습니다

SPI_OK_INSERT_RETURNING

만일반환 삽입이었음 실행됨

SPI_OK_DELETE_RETURNING

if a복귀 삭제이었음 실행됨

SPI_OK_UPDATE_RETURNING

만일업데이트 반환 중이었음 실행됨

SPI_OK_UTILITY

유틸리티 명령인 경우(예:만들기 표)가 실행되었습니다.

SPI_OK_REWRITTEN

명령이 다른 종류의 명령으로 재작성된 경우 명령(예:업데이트이 되었다삽입) 작성자: a규칙.

오류 발생 시 다음 음수 값 중 하나는 다음과 같습니다. 반환됨:

SPI_ERROR_ARGUMENT

if명령isNULL또는개수입니다 0 미만

SPI_ERROR_COPY

ifstdout에 복사또는표준 입력에서 복사시도되었습니다

SPI_ERROR_TRANSACTION

트랜잭션 조작 명령이 시도된 경우 (시작, 커밋, 롤백, 세이브포인트, 거래 준비, 커밋 준비됨, 롤백 준비됨또는 모든 변형 그 중)

SPI_ERROR_OPUNKNOWN

명령 유형을 알 수 없는 경우(발생하지 않아야 함)

SPI_ERROR_UNCONNECTED

연결되지 않은 프로시저에서 호출된 경우

참고

모든 SPI 쿼리 실행 함수는 둘 다 설정SPI_처리됨SPI_tuptable(포인터만 있고 내용은 아님 구조의). 이 두 전역 변수를 로컬에 저장하십시오. 결과 테이블에 액세스해야 하는 경우 프로시저 변수롤 토토또는 다른 것 이후 호출에 대한 쿼리 실행 기능입니다.