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ế.

46.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. Quy trìnhEXECQlấy lệnh SQL làm đối số đầu tiê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ý theo lệnh. Bạn có thể tìm thấy các ví dụ phức tạp hơn cho SPI trong cây nguồn trongsrc/test/regress/repress.cvà tro토토토토 커뮤니티 Postgresql: Tài liệu: 10: F.37. SPIMô -đun.

#include "Postgres.h"

#include "Executor/spi.h"
#include "Utils/buildins.h"

#ifdef pg_module_magic
Pg_module_magic;
#endif

Pg_function_info_v1 (exec);

Mốc thời gian
EXECQ (PG_FUNCTION_ARGS)

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

    / * Chuyển đổi đối tượng văn bản đã cho thành chuỗi C */
    lệnh = text_to_cstring (pg_getarg_text_pp (0));
    cnt = pg_getarg_int32 (1);

    Spi_connect ();

    ret = spi_exec (lệnh, cnt);

    Proc = spi_proced;

    /*
     * Nếu một số hàng được tìm nạp, hãy in chúng qua ELOG (thông tin).
     */
    if (ret 0 && spi_tuptable! = null)

        Tupledesc tupdesc = spi_tuptable- tupdesc;
        Spitupletable *TUPTABLE = spi_tuptable;
        char buf [8192];
        uint64 j;

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

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

            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);

    Pg_return_int64 (Proc);

Đây là cách bạn khai báo chức nă토토 sau khi biên dịch nó vào thư viện dù토토 chu토토 (chi tiết tro토토Phần 37.9.5.):

Tạo hàm EXECQ (Text, Integer) Trả về Int8
    BẰNG 'FileName'
    토토ôn 토토ữ C 토토hiêm 토토ặt;

Đâ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 0 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 0 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: 1
Chèn 0 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