사설 토토지정된 실행
에 대한 SQL 명령개수행. 만일읽기 전용is참, 명령은 읽기 전용이어야 하며 실행되어야 합니다.
오버헤드가 다소 감소합니다.
이 함수는 연결된 프로시저에서만 호출할 수 있습니다.
만약개수0이면 명령은 다음과 같습니다. 적용되는 모든 행에 대해 실행됩니다. 만일개수0보다 크고 그 이하개수행이 검색됩니다. 처형 a를 추가하는 것과 마찬가지로 개수에 도달하면 중지됩니다.제한절을 쿼리에 추가합니다. 예를 들어,
사설 토토("SELECT * FROM foo", true, 5);
테이블에서 최대 5개의 행을 검색합니다. 다음과 같은 점에 유의하십시오. 제한은 명령이 실제로 행을 반환하는 경우에만 유효합니다. 에 대한 예
사설 토토("foo SELECT * FROM 막대에 삽입", 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, 그러면 전역을 사용할 수 있습니다. 포인터SPITupleTable *SPI_tuptable에 결과 행에 액세스합니다. 일부 유틸리티 명령(예:설명)도 행 세트를 반환하고SPI_tuptable이 경우 결과가 포함됩니다 너무. 일부 유틸리티 명령(복사, 다음으로 테이블 생성) 행 세트를 반환하지 않습니다. 그래서SPI_tuptable은 NULL이지만 여전히 처리된 행 수를 반환합니다.SPI_처리됨.
구조SPITupleTable이다 다음과 같이 정의됩니다:
typedef 구조체
MemoryContext tuptabcxt; /* 결과 테이블의 메모리 컨텍스트 */
uint32가 할당되었습니다. /* 할당된 값의 수 */
uint32 무료; /* 사용 가능한 값의 수 */
TupleDesc tupdesc; /* 행 설명자 */
HeapTuple *vals; /* 행 */
SPITupleTable;
발스은 포인터 배열입니다. 행. (유효한 항목 수는 다음과 같습니다.SPI_processed.) tupdesc는 SPI 함수 처리에 전달할 수 있는 행 설명자입니다. 행이 있습니다.tuptabcxt, 할당됨및무료내부 필드는 SPI 호출자가 사용하도록 의도되지 않았습니다.
SPI_finish모두 해제SPITupleTable15424_15552SPI_freetuptable.
명령 실행이 성공했다면 다음 중 하나가 됩니다. 다음(음수가 아닌) 값이 반환됩니다.
if a선택(그러나 아님선택)이 실행되었습니다.
if a선택처형되었습니다
만약삽입처형되었습니다
if a삭제처형되었습니다
만약업데이트처형되었습니다
만일반환 삽입처형되었습니다
if a복귀 삭제처형되었습니다
만일업데이트 반환 중처형되었습니다
유틸리티 명령인 경우(예:만들기 표)가 실행되었습니다.
명령이 다른 종류의 명령으로 다시 작성된 경우(예:업데이트이 되었다삽입) 작성자: aPostgreSQL : 문서 : 9.3 : 사설 토토 시스템.
오류 발생 시 다음 음수 값 중 하나가 반환됩니다:
if명령isNULL또는개수다음보다 작습니다. 0
if표준 출력으로 복사또는표준 입력에서 복사시도되었습니다
트랜잭션 조작 명령이 시도된 경우(시작, 커밋, 롤백, 세이브포인트, 거래 준비, 커밋 준비됨, 롤백 준비됨또는 그 변형)
명령 유형을 알 수 없는 경우(발생하지 않아야 함)
연결되지 않은 프로시저에서 호출된 경우
모든 SPI 쿼리 실행 함수는 둘 다 설정SPI_처리됨그리고SPI_tuptable(포인터만 있고 내용은 아님)
구조). 이 두 전역 변수를 로컬에 저장하십시오.
결과 테이블에 액세스해야 하는 경우 프로시저 변수사설 토토또는 다른 것
이후 호출에 대한 쿼리 실행 기능입니다.
| 이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
| SPI_pop | 위로 | SPI_exec |