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

21.5. 예

이 SPI 사용 예는 가시성 규칙을 보여줍니다. src/test/regress/regress.c에는 더 복잡한 예가 있으며 기여/spi에서.

이것은 SPI 사용의 매우 간단한 예입니다. 절차 토토 사이트 순위는 첫 번째 인수에 SQL 쿼리를 허용하고 두 번째는 SPI_exec를 사용하여 쿼리를 실행하고 쿼리가 실행된 튜플 수:

#include "executor/spi.h" /* SPI로 작업하는 데 필요한 것입니다 */

int 토토 사이트 순위(text *sql, int cnt);

정수
토토 사이트 순위(텍스트 *sql, int cnt)

    char *쿼리;
    int ret;
    int 프로세스;

    /* 주어진 TEXT 객체를 C 문자열로 변환 */
    쿼리 = DatumGetCString(DirectFunctionCall1(textout,
                                                PointerGetDatum(sql)));

    SPI_connect();

    ret = SPI_exec(쿼리, cnt);

    proc = SPI_processed;
    /*
     * 이것이 SELECT이고 일부 튜플을 가져온 경우 -
     * elog(NOTICE)를 통해 호출자에게 튜플을 반환합니다.
     */
    if ( ret == SPI_OK_SELECT && SPI_processed  0 )

        TupleDesc tupdesc = SPI_tuptable-tupdesc;
        SPITupleTable *tuptable = SPI_tuptable;
        char buf[8192];
        int i,j;

        for (j = 0; j < proc; j++)

            HeapTuple 튜플 = tuptable-vals[j];

            for (i = 1, buf[0] = 0; i <= tupdesc-natts; i++)
                sprintf(buf + strlen (buf), " %s%s",
                        SPI_getvalue(튜플, tupdesc, i),
                        (i == tupdesc-natts) ? " " : " |");
            elog(알림, "토토 사이트 순위: %s", buf);

    SPI_finish();

    pfree(쿼리);

    반환(proc);

이제 함수를 컴파일하고 생성하십시오:

CREATE FUNCTION 토토 사이트 순위(텍스트, 정수) RETURNS 정수
    AS '...path_to_so'
    언어 C;
vac= SELECT 토토 사이트 순위('CREATE TABLE a (x INTEGER)', 0);
실행
-----
    0
(1줄)

vac= VALUES에 삽입 (토토 사이트 순위('VALUES (0)',0));
삽입 167631 1
vac= SELECT 토토 사이트 순위('SELECT * FROM a',0);
공지:토토 사이트 순위: 0 <<< 토토 사이트 순위에 의해 삽입됨

NOTICE:토토 사이트 순위: 1 <<< 토토 사이트 순위에 의해 반환되고 상위 INSERT에 의해 삽입된 값

실행
-----
    2
(1줄)

vac= SELECT 토토 사이트 순위('a SELECT x + 2 FROM a에 삽입',1);
실행
-----
    1
(1줄)

vac= SELECT 토토 사이트 순위('SELECT * FROM a', 10);
공지사항:토토 사이트 순위: 0 

공지사항:토토 사이트 순위: 1 

NOTICE:토토 사이트 순위: 2 <<< 0 + 2, 지정된 대로 하나의 튜플만 삽입됨

실행
-----
    3 <<< 10은 최대값만, 3은 실수 튜플 수입니다.
(1줄)

vac= a에서 삭제;
3개 삭제
vac= VALUES에 삽입(토토 사이트 순위('SELECT * FROM a', 0) + 1);
삽입 167712 1
vac= SELECT * FROM a;
엑스
-
1 <<< (0) + 1에는 튜플이 없습니다.
(1줄)

vac= VALUES에 삽입(토토 사이트 순위('SELECT * FROM a', 0) + 1);
공지사항:토토 사이트 순위: 0 
삽입 167713 1
vac= SELECT * FROM a;
엑스
-
1
2 <<< a + 1에 단일 튜플이 있었습니다.
(2열)

-- 이는 데이터 변경 가시성 규칙을 보여줍니다.

vac= SELECT 토토 사이트 순위('SELECT * FROM a', 0) * x FROM a에 삽입;
공지사항:토토 사이트 순위: 1 
공지사항:토토 사이트 순위: 2 
공지사항:토토 사이트 순위: 1 
공지사항:토토 사이트 순위: 2 
공지사항:토토 사이트 순위: 2 
삽입 0 2
vac= SELECT * FROM a;
엑스
-
1
2
2 <<< 2 튜플 * 1 (첫 번째 튜플의 x)
6 <<< 3개의 튜플(방금 삽입된 2 + 1) * 2(두 번째 튜플의 x)
(4열) ^^^^^^^^ 
                     다른 호출에서 토토 사이트 순위()에 표시되는 튜플