이 섹션에는 SPI 사용의 매우 간단한 예가 포함되어 있습니다. 그만큼
절차토토
SQL을 가져갑니다
명령은 첫 번째 인수로 명령하고 행은 두 번째로 계산됩니다.
를 사용하여 명령을 실행합니다.SPI_EXEC
명령. 소스에서 SPI에 대한 더 복잡한 토토를 찾을 수 있습니다.
나무에서SRC/TEST/Regress/Regress.C및
안에Contrib/SPI.
#include "executor/spi.h" int 토토 (text *sql, int cnt); int 토토 (text *sql, int cnt) char *명령; int ret; int proc; / * 주어진 텍스트 개체를 C 문자열로 변환 */ 명령 = DatumgetCString (DirectFunctionCall1 (Textout, pointergetDatum (sql))); spi_connect (); ret = spi_exec (command, cnt); Proc = SPI_PROCESSED; /* * 일부 행을 가져 오면 elog (정보)을 통해 인쇄하십시오. */ if (ret 0 && spi_tuptable! = null) tupledesc tupdesc = spi_tuptable- tupdesc; spitupletable *tuptable = spi_tuptable; Char Buf [8192]; int i, j; for (j = 0; j <Proc; j ++) 핵심 튜플 = tuptable- vals [j]; for (i = 1, buf [0] = 0; i <= tupdesc- natts; i ++) snprintf (buf + strlen (buf), sizeof (buf) - strlen (buf), " %s %s", spi_getValue (튜플, tupdesc, i), (i == tupdesc- natts)? "": "|"); elog (정보, "토토 : %s", buf); spi_finish (); pfree (명령); 반환 (Proc);
(이 기능은 Call Convention 버전 0을 사용하여 이해하기 쉬운 예. 실제 응용 프로그램에서 사용해야합니다 새 버전 1 인터페이스)
이것은 컴파일 된 후 기능을 선언하는 방법입니다. 공유 도서관으로 :
함수 생성 토토 (텍스트, 정수) 정수를 반환합니다 처럼 'filename' 언어 C;
샘플 세션은 다음과 같습니다.
= select 토토 ( '테이블 생성 a (x integer)', 0); 토토 ------- 0 (1 줄) = 값에 삽입 (토토 ( '값에 삽입 (0)', 0); 삽입 0 1 = select 토토 ( 'select * from a', 0); 정보 : 토토 : 0- 토토에 의해 삽입되었습니다 정보 : 토토 : 1- execQ에 의해 반환되고 상단 삽입에 의해 삽입 됨 토토 ------- 2 (1 줄) = select 토토 ( 'a', 1에서 선택 x + 2에 삽입); 토토 ------- 1 (1 줄) = select 토토 ( 'select * from a', 10); 정보 : 토토 : 0 정보 : execQ : 1 정보 : 토토 : 2-0 + 2, 지정된대로 하나의 행만 삽입 토토 ------- 3-10은 최대 값, 3은 실수 행 수입니다. (1 줄) = a에서 삭제; 삭제 3 = 값에 삽입 (토토 ( 'select * from a', 0) + 1); 삽입 0 1 = 선택 *에서; 엑스 --- 1- (0) + 1의 행이 없습니다 (1 줄) = 값에 삽입 (토토 ( 'select * from a', 0) + 1); 정보 : execQ : 1 삽입 0 1 = 선택 *에서; 엑스 --- 1 2- + 1에 한 줄이있었습니다. (2 줄) - 데이터 변경 가시성 규칙을 보여줍니다. = select 토토에 삽입 ( 'select * from a', 0) * x from a; 정보 : execQ : 1 정보 : execQ : 2 정보 : execQ : 1 정보 : execQ : 2 정보 : execQ : 2 0 2 삽입 = 선택 *에서; 엑스 --- 1 2 2-2 행 * 1 (첫 번째 줄에서 x) 6-3 행 (2 + 1 방금 삽입) * 2 (x 2 열에서 x) (4 줄) ^^^^^^ 다른 호출에서 토토 ()에 보이는 행