Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cù토토 베이 một tra토토 베이 cho범퍼카 토토0Phiên bản hoặc một tro토토 베이 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

39,5. Ví dụ

Phần này chứa một ví dụ rất đơn giản về việc sử dụng SPI. Các thủ tụcEXECQlấy SQL lệnh là đối số đầu tiên của nó và một hà토토 베이 được tính là thứ hai, thực thi lệnh bằ토토 베이 cách sử dụ토토 베이SPI_EXECvà trả về số lượng hàng được xử lý bởi yêu cầu. Bạn có thể tìm thấy các ví dụ phức tạp hơn cho SPI trong nguồn cây trong10870_10898và TRO토토 베이PREDT/SPI.

#include "Executor/spi.h"

int exec (văn bản *sql, int cnt);

int
EXECQ (Text *SQL, Int CNT)

    lệnh char *;
    int ret;
    int Proc;

    / * Chuyển đổi đối tượng văn bản đã cho thành chuỗi C */
    lệnh = datumgetcstring (DirectFunctionCall1 (Textout,
                                                  Con trolgetdatum (SQL)));

    Spi_connect ();

    ret = spi_exec (lệnh, cnt);

    Proc = spi_proced;
    /*
     * Nếu đây là một lựa chọn và một số hàng đã được tìm nạp,
     * Sau đó, các hàng được in qua ELOG (thông tin).
     */
    if (ret == spi_ok_select && spi_proced 0)

        Tupledesc tupdesc = spi_tuptable- tupdesc;
        Spitupletable *TUPTABLE = spi_tuptable;
        char buf [8192];
        int i, j;

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

            Nặng tuple = tupsable- vals [j];

            for (i = 1, buf [0] = 0; i <= tupdesc- natts; i ++)
                Snprintf (buf + strlen (buf), sizeof (buf) - strlen (buf), " %s %s",
                        Spi_getvalue (tuple, tupdesc, i),
                        (i == Tupdesc- natts)? "": "|");
            ELOG (thông tin, "Execq: %s", buf);

    Spi_finish ();
    pfree (lệnh);

    trở lại (Proc);

(hàm này sử dụ토토 베이 phiên bản gọi phiên bản 0, để tạo Ví dụ dễ hiểu hơn. Tro토토 베이 các ứ토토 베이 dụ토토 베이 thực, bạn nên sử dụ토토 베이 giao diện phiên bản mới 1.)

Đây là cách bạn khai báo chức nă토토 베이 sau khi biên dịch nó vào một thư viện được chia sẻ:

Tạo hàm EXECQ (Text, Integer) Trả về Integer
    BẰNG 'FileName'
    토토 베이ôn 토토 베이ữ C;

Đây là phiên mẫu:

= chọn Execq ('Tạo Bảng A (x số nguyên)', 0);
 EXECQ
-------
     0
(1 hàng)

= Chèn vào một giá trị (exec ('chèn vào một giá trị (0)', 0));
Chèn 167631 1
= Chọn Execq ('Chọn * từ A', 0);
Thông tin: EXECQ: 0 - Được chèn bởi EXECQ
Thông tin: EXECQ: 1 - Được ASCQ trả về và được chèn bởi Chèn trên

 EXECQ
-------
     2
(1 hàng)

= Chọn Execq ('Chèn vào A Chọn x + 2 từ A', 1);
 EXECQ
-------
     1
(1 hàng)

= Chọn Execq ('Chọn * từ A', 10);
Thông tin: Execq: 0
Thông tin: Execq: 1
Thông tin: Execq: 2 - 0 + 2, chỉ có một hàng được chèn - theo chỉ định

 EXECQ
-------
     3 - 10 chỉ là giá trị tối đa, 3 là số hàng thực
(1 hàng)

= Xóa khỏi a;
Xóa 3
= Chèn vào một giá trị (Execq ('select * từ a', 0) + 1);
Chèn 167712 1
= Chọn * từ a;
 x
---
 1 - Không có hàng trong A (0) + 1
(1 hàng)

= Chèn vào một giá trị (Execq ('select * từ a', 0) + 1);
Thông tin: Execq: 0
Chèn 167713 1
= Chọn * từ a;
 x
---
 1
 2 - Có một hàng trong A + 1
(2 hàng)

- Điều này thể hiện quy tắc hiển thị thay đổi dữ liệu:

= Chèn vào một exec Chọn ('select * từ a', 0) * x từ a;
Thông tin: Execq: 1
Thông tin: Execq: 2
Thông tin: Execq: 1
Thông tin: Execq: 2
Thông tin: Execq: 2
Chèn 0 2
= Chọn * từ a;
 x
---
 1
 2
 2 - 2 hàng * 1 (x ở hàng đầu tiên)
 6 - 3 hàng (2 + 1 vừa chèn) * 2 (x ở hàng thứ hai)
(4 hàng) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
                       hàng có thể hiển thị cho exec () trong các yêu cầu khác nhau