Phiên bản không được hỗ trợ:8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
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ùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

39.2. tỷ lệ kèo bóng đá

tỷ lệ kèo bóng đá vào cơ sở dữ liệu từ chức năng Perl của bạn có thể Xong qua chức năngspi_exec_queryđược mô tả bên dưới hoặc thông qua một Mô -đun thử nghiệmDBD :: PGSPI(cũng có sẵn tạiTrang web gương CPAN). Mô -đun này có sẵnDBI-Compliant cơ sở tỷ lệ kèo bóng đá có tên$ pg_dbhcó thể được sử dụng để thực hiện tỷ lệ kèo bóng đá vấn với bình thườngDBICú pháp.

PL/PERL cung cấp các lệnh Perl bổ sung:

spi_exec_query(tỷ lệ kèo bóng đá vấn[,Max-Rows])
spi_query(lệnh)
spi_fetchrow(con trỏ)
spi_prepare(lệnh, Các loại đối số)
SPI_EXEC_PREPARED(kế hoạch)
spi_query_prepared(kế hoạch[,thuộc tính],Đối số)
spi_cursor_close(con trỏ)
SPI_FreePlan(kế hoạch)

spi_exec_querythực thi SQL lệnh và trả về toàn bộ hàng được đặt làm tham chiếu đến một Mảng tham chiếu băm.Bạn chỉ nên sử dụng lệnh này Khi bạn biết rằng tập kết quả sẽ tương đối bé nhỏ.Đây là một ví dụ về tỷ lệ kèo bóng đá vấn (Chọnlệnh) với tối đa tùy chọn Số lượng hàng:

$ rv = spi_exec_query ('select * from my_table', 5);

Điều này trả về tối đa 5 hàng từ bảngmy_table. Nếu nhưmy_tablecó cộtmy_column, bạn có thể nhận được giá trị đó từ hàng$ icủa kết quả như thế này:

$ foo = $ rv- hàng [$ i]- my_column;

Tổng số hàng được trả về từ AChọnTruy vấn có thể được tỷ lệ kèo bóng đá như thế này:

$ NROWS = $ RV- đã xử lý

Đây là một ví dụ sử dụng loại lệnh khác:

$ query = "chèn vào các giá trị my_table (1, 'test')";
$ rv = spi_exec_query ($ query);

Sau đó, bạn có thể tỷ lệ kèo bóng đá trạng thái lệnh (ví dụ:spi_ok_insert) Như thế này:

$ res = $ rv- status;

Để có số lượng hàng bị ảnh hưởng, làm:

$ nRows = $ rv- đã xử lý;

Đây là một ví dụ hoàn chỉnh:

Tạo thử nghiệm bảng (
    Tôi int,
    v varchar
);

Chèn vào các giá trị kiểm tra (i, v) (1, 'dòng đầu tiên');
Chèn vào các giá trị kiểm tra (i, v) (2, 'dòng thứ hai');
Chèn vào các giá trị kiểm tra (i, v) (3, 'dòng thứ ba');
Chèn vào các giá trị kiểm tra (i, v) (4, 'bất tử');

Tạo hoặc thay thế chức năng test_munge () trả về kiểm tra setof dưới dạng $$
    $ rv của tôi = spi_exec_query ('chọn i, v từ thử nghiệm;');
    $ status của tôi = $ rv- status;
    $ nROWS = $ RV- đã xử lý;
    foreach của tôi $ rn (0 .. $ nROWS - 1) 
        $ row của tôi = $ rv- hàng [$ rn];
        $ row- i += 200 nếu được xác định (hàng $- i);
        $ row- v = ~ tr/a-za-z/a-za-z/if (xác định ($ row- v));
        return_next ($ hàng);

    trả lại Undef;
$$ Ngôn ngữ plperl;

Chọn * từ test_munge ();

spi_query11541_11555Làm việc cùng nhau như một cặp cho hàng các bộ có thể lớn hoặc cho các trường hợp bạn muốn trả lại hàng khi chúng đến.spi_fetchrowWorkschỉvớiSPI_Query. Ví dụ sau minh họa Cách bạn sử dụng chúng cùng nhau:

11959_12824

spi_prepare, spi_query_prepared, 12962_12981SPI_FreePlanThực hiện tương tự chức năng nhưng cho các tỷ lệ kèo bóng đá vấn đã chuẩn bị. Khi một kế hoạch tỷ lệ kèo bóng đá vấn được chuẩn bị bằng một cuộc gọi đếnspi_prepare, kế hoạch có thể được sử dụng thay vì tỷ lệ kèo bóng đá vấn chuỗi, trongSPI_EXEC_PREPARED, trong đó kết quả là Giống như được trả về bởiSPI_EXEC_Queryhoặc trongspi_query_preparedtrả về con trỏ Chính xác nhưspi_querykhông, trong đó sau đó có thể được chuyển chospi_fetchrow.

13668_13870SPI_FreePlan:

Tạo hoặc thay thế hàm init () Trả về số nguyên dưới dạng $$
        $ _Shared my_plan = spi_prepare ('select (now () + $ 1) :: date as now', 'intercal');
$$ Ngôn ngữ plperl;

Tạo hoặc thay thế hàm add_time (khoảng) trả về văn bản dưới dạng $$
        trả về spi_exec_prepared ( 
                $ _Shared my_plan,
                $ _ [0],
        )- hàng- [0]- bây giờ;
$$ Ngôn ngữ plperl;

Tạo hoặc thay thế hàm đã hoàn thành () trả về số nguyên dưới dạng $$
        spi_freeplan ($ _shared my_plan);
        Undef $ _Shared my_plan;
$$ Ngôn ngữ plperl;

Chọn init ();
Chọn add_time ('1 ngày'), add_time ('2 ngày'), add_time ('3 ngày');
Chọn xong ();

  add_time |  add_time |  add_time  
------------+------------+------------
 2005-12-10 | 2005-12-11 | 2005-12-12

Lưu ý rằng chỉ số tham số trongspi_prepaređược xác định qua $ 1, $ 2, $ 3, v.v. Vì vậy, tránh tuyên bố các chuỗi tỷ lệ kèo bóng đá vấn trong các trích dẫn kép có thể dễ dàng dẫn đến các lỗi khó bắt.

Thông thường,spi_fetchrownên được lặp lại cho đến khi nó trả vềUndef, chỉ ra rằng không còn Hàng để đọc. Con trỏ được tự động giải phóng khispi_fetchrowreturnUndef. Nếu bạn không muốn đọc tất cả các hàng, thay vào đó gọispi_cursor_close​​Để giải phóng con trỏ. Không làm như vậy sẽ dẫn đến rò rỉ bộ nhớ.

ELOG(15608_15615, MSG)

phát ra thông báo nhật ký hoặc lỗi. Các cấp độ có thể làDebug, log, INFO, Thông báo, Cảnh báoERROR. ERRORlàm tăng tình trạng lỗi; Nếu điều này không bị mắc kẹt bởi mã Perl xung quanh, thì Lỗi tuyên tỷ lệ kèo bóng đáền ra tỷ lệ kèo bóng đá vấn gọi, gây ra giao dịch hiện tại hoặc trừ đi bị hủy bỏ. Cái này thực sự giống như perlDieLệnh. Các cấp độ khác chỉ tạo ra thông điệp của các cấp độ ưu tiên khác nhau. Cho dù tin nhắn của Một ưu tiên cụ thể được báo cáo cho khách hàng, được viết đến nhật ký máy chủ hoặc cả hai đều được điều khiển bởilog_min_messagesclient_min_messagesBiến cấu hình. Nhìn thấyChương 17Để biết thêm thông tin.