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

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

tỷ lệ kèo bóng đá 88 vào cơ sở dữ liệu từ chức năng Perl của bạn có thể thực hiện thông qua các chức năng sau:

spi_exec_query(tỷ lệ kèo bóng đá 88 vấn7115_7121Max-Rows])

spi_exec_queryThực hiện 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 đá 88 vấn (ChọnLệnh) với mức 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 đá 88 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 đá 88 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 bài kiểm tra 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_query(lệnh)
spi_fetchrow(con trỏ)
spi_cursor_close(con trỏ)

spi_queryspi_fetchrowLà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:

Tạo loại foo_type as (The_num Integer, The_Text Text);

Tạo hoặc thay thế chức năng Lô_MD5 (Số nguyên) Trả về setof foo_type dưới dạng $$
    Sử dụng Digest :: MD5 QW (MD5_HEX);
    $ file của tôi = '/usr/share/dict/words';
    $ T = địa phương của tôi;
    ELOG (Thông báo, "Mở tệp $ Tệp tại $ T");
    Mở $ fh của tôi, '<', $ file # ooh, đó là một tỷ lệ kèo bóng đá 88 tệp!
        hoặc elog (lỗi, "không thể mở tệp $ để đọc: $!");
    my @words = <$ fh;
    đóng $ fh;
    $ t = địa phương;
    ELOG (Thông báo, "Tệp đóng $ Tệp tại $ T");
    Chomp (@words);
    hàng $ của tôi;
    $ STH = spi_Query của tôi ("Chọn * từ Generate_Series (1, $ _ [0]) là B (a)");
    while (được xác định ($ row = spi_fetchrow ($ sth))) 
        return_next (
            The_num = $ $ Row- A,
            The_Text = md5_hex ($ words [rand @words])
        );

    trở lại;
$$ plperlu ngôn ngữ;

Chọn * từ LOTEA_MD5 (500);

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 trả về bởi11744_11755đượ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ớ.

spi_prepare(lệnh, Các loại đối số)
spi_query_prepared(Plan, Đối số)
SPI_EXEC_PREPARED12556_12559kế hoạch[,thuộc tính],Đối số)
SPI_FreePlan(Plan)

spi_prepare, spi_query_prepared, SPI_EXEC_PREPAREDSPI_FreePlanThực hiện tương tự chức năng nhưng đối với các tỷ lệ kèo bóng đá 88 vấn đã chuẩn bị.spi_prepareChấp nhận chuỗi tỷ lệ kèo bóng đá 88 vấn với Người giữ chỗ đối số được đánh số ($ 1, $ 2, v.v.) và một chuỗi Danh sách các loại đối số:

13346_13442

Một khi kế hoạch tỷ lệ kèo bóng đá 88 vấn được chuẩn bị bằng cách gọi đếnspi_prepare, kế hoạch có thể được sử dụng thay vì tỷ lệ kèo bóng đá 88 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. Tham số thứ hai tùy chọn ĐẾNSPI_EXEC_PREPAREDlà một hàm băm tham chiếu của các thuộc tính; thuộc tính duy nhất hiện tại được hỗ trợ làgiới hạn, đặt Số lượng hàng tối đa được trả về bởi một tỷ lệ kèo bóng đá 88 vấn.

​​Ưu điểm của các tỷ lệ kèo bóng đá 88 vấn đã chuẩn bị là có thể Để sử dụng một kế hoạch đã chuẩn bị cho nhiều hơn một thực thi tỷ lệ kèo bóng đá 88 vấn. Sau khi kế hoạch không cần thiết nữa, nó có thể được giải phóng bằngSPI_FreePlan:

14570_15321

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 đá 88 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.

Một ví dụ khác minh họa việc sử dụng một tùy chọn tham số trongSPI_EXEC_PREPARED:

15744_16605
16683_16689(cấp, 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 đá 88ền ra tỷ lệ kèo bóng đá 88 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 18Để biết thêm thông tin.