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

SPI_PREPARE

이름

SPI_PREPARE- 아직 실행하지 않고 진술 준비

시놉시스

spiplanptr spi_prepare (const char *명령, intNARGS, oid *Argtypes)

설명

SPI_PREPARE지정된 명령에 대해 준비된 명령문을 작성하고 리턴하지만 명령을 실행하지는 않습니다. 준비된 진술은 나중에 반복적으로 실행될 수 있습니다.SPI_EXECUTE_PLAN.

동일하거나 유사한 명령을 반복적으로 실행 해야하는 경우 일반적으로 구문 분석 분석을 한 번만 수행하는 것이 유리하며, 명령에 대한 실행 계획을 재사용하는 것이 유리할 수 있습니다..SPI_PREPARE명령 문자열을 구문 분석 결과를 캡슐화하는 준비 문으로 변환합니다. 준비된 진술은 또한 각 실행에 대한 사용자 지정 계획을 생성하는 것이 도움이되지 않는 경우 실행 계획을 캐싱하기위한 장소를 제공합니다.

매개 변수를 작성하여 준비된 명령을 일반화 할 수 있습니다 ($ 1, $ 2등) 정상 명령에서 상수가 될 대신. 매개 변수의 실제 값은에 지정됩니다.SPI_EXECUTE_PLAN호출됩니다. 이를 통해 준비된 명령은 매개 변수가없는 것보다 더 넓은 범위의 상황에서 사용할 수 있습니다.

진술은SPI_PREPARE이후 절차의 현재 호출에만 사용할 수 있습니다.SPI_FINISH그러한 진술에 할당 된 메모리가 할당되었습니다. 그러나 그 진술은 함수를 사용하여 더 오랫동안 저장 될 수 있습니다SPI_KEEPPLAN또는SPI_SAVEPLAN.

인수

const char *명령

명령 문자열

intNARGS

입력 매개 변수 수 ($ 1, $ 2등)

OID *Argtypes

배열을 포함하는 배열에 대한 포인터OID매개 변수의 데이터 유형

반환 값

SPI_PREPARE널 비 널 포인터를 반환Spiplan, 준비된 진술을 나타내는 불투명 한 구조물입니다. 오류로NULL반환되고SPI_RESULT|SPI_EXECUTESPI_ERROR_ARGUMENTif명령isNULL또는 ifNARGS0보다 작거나 ifNARGS| 0보다 크다ArgtypesisNULL.

노트

매개 변수가 정의되지 않으면의 첫 번째 사용시 일반 계획이 작성됩니다.SPI_EXECUTE_PLAN및 모든 후속 실행에도 사용됩니다. 매개 변수가있는 경우의 처음 몇 가지 사용SPI_EXECUTE_PLAN제공된 매개 변수 값에 특정한 사용자 지정 계획을 생성합니다. 동일한 준비된 진술을 충분히 사용한 후SPI_EXECUTE_PLAN일반적인 계획을 세우고 사용자 정의 계획보다 훨씬 비싸지 않으면 매번 재 플래닝 대신 일반 계획을 사용하기 시작합니다. 이 기본 동작이 부적합한 경우 전달하여 변경할 수 있습니다.cursor_opt_generic_plan또는cursor_opt_custom_plan플래그 toSPI_PREPARE_CURSOR, 각각 일반 또는 사용자 정의 계획의 사용을 강제로 사용합니다.

준비된 진술의 주요 요점은 반복 된 구문 분석 및 진술 계획을 피하는 것입니다.토토 베이명령문에 사용 된 데이터베이스 개체가 준비된 명령문의 이전 사용 이후 정의 (DDL) 변경을 겪을 때마다 명령문을 다시 분석하고 다시 계획 할 것입니다. 또한이면search_path하나의 사용에서 다음 사용으로 변경되면, 진술은 새로운 것을 사용하여 재판매됩니다search_path. (이 후자의 행동은 새로운 것입니다토토 베이9.3.) 참조PostgreSQL : 문서 : 9.4 : 무지개 토토준비된 진술의 행동에 대한 자세한 내용은

이 기능은 연결된 절차에서만 호출해야합니다.

spiplanptr|SPI.H. 내용에 직접 액세스하려고 시도하는 것은 현명하지 않으므로, 코드는 향후 코드가 향후 수정 될 가능성이 훨씬 높아토토 베이.

이름spiplanptr데이터 구조에 더 이상 실행 계획이 포함되어 있지 않기 때문에 다소 역사적입니다.