3295_3437hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
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 tỷ lệ kèo bóng đá tối nay phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

41.3. Chức năng tích tỷ lệ kèo bóng đá tối nay

41.3.1. Truy cập cơ sở dữ liệu từ PL/Perl

Truy cập vào cơ sở dữ liệu từ tỷ lệ kèo bóng đá tối nay Perl của bạn có thể thực hiện thông qua các tỷ lệ kèo bóng đá tối nay sau:

spi_exec_query(Truy vấn[,Max-Rows])

spi_exec_querythực thi một Lệnh SQL và trả về toàn bộ hàng được đặt làm tham chiếu đến một mảng tỷ lệ kèo bóng đá tối nay tài liệu tham khảo băm.9978_10092Đây là một ví dụ về truy 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 truy cập như cái 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 tỷ lệ kèo bóng đá tối nay giá trị my_table (1, 'test')";
$ rv = spi_exec_query ($ query);

Sau đó, bạn có thể truy cập trạng thái lệnh (ví dụ:spi_ok_insert) Như thế này:

$ res = $ rv- status;

11358_11399

$ 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ế tỷ lệ kèo bóng đá tối nay 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 Bộ hàng có thể lớn hoặc cho các trường tỷ lệ kèo bóng đá tối nay bạn muốn trả lại hàng khi chúng đến.spi_fetchrowWorkschỉvớispi_query. Ví dụ sau đây 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ế tỷ lệ kèo bóng đá tối nay 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 truy cập 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ởispi_queryđược tự động giải phóng khispi_fetchrowreturnUndef. Nếu bạn không muốn Đọc tất cả tỷ lệ kèo bóng đá tối nay 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, tỷ lệ kèo bóng đá tối nay loại đối số)
spi_query_prepared (Plan, Đối số)
SPI_EXEC_PREPARED (kế hoạch[,thuộc tính],Đối số)
SPI_FreePlan (kế hoạch)

spi_prepare, spi_query_prepared, SPI_EXEC_PREPAREDSPI_FreePlanThực hiện tương tự tỷ lệ kèo bóng đá tối nay nhưng đối với các truy vấn đã chuẩn bị.spi_prepareChấp nhận chuỗi truy 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 tỷ lệ kèo bóng đá tối nay loại đối số:

$ plan = spi_prepare ('chọn * từ kiểm tra trong đó id $ 1 và name = $ 2',
                                                     'Integer', 'text');

Một khi kế hoạch truy 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 thế của truy 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. Thứ hai tùy chọn tham số đếnSPI_EXEC_PREPAREDlà một tham chiếu băm của tỷ lệ kèo bóng đá tối nay thuộc tính; thuộc tính duy nhất hiện được hỗ trợ làGiới hạn,, đặt số lượng hàng tối đa được trả về bởi một Truy vấn.

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

Tạo hoặc thay thế hàm init () trả về void dưới dạng $$
        $ _Shared my_plan = spi_prepare ('select (now () + $ 1) :: ngày như bây giờ',
                                        'Khoảng');
$$ 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ế tỷ lệ kèo bóng đá tối nay đã hoàn thành () trả về void 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, vv, vì vậy tránh tuyên bố chuỗi truy vấn trong tỷ lệ kèo bóng đá tối nay trích dẫn kép điều đó có thể dễ dàng dẫn đến tỷ lệ kèo bóng đá tối nay 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ố trong18572_18591:

18638_19554

41.3.2. tỷ lệ kèo bóng đá tối nay tiện ích trong Pl/perl

ELOG (cấp, msg)

20010_20071Debug, log, INFO, 20203_20211, 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 xung quanh mã Perl, lỗi truyền ra gọi truy vấn, gây ra giao dịch hiện tại hoặc trừ đi bị hủy bỏ. Đây thực sự là Giống như perlDieLệnh. tỷ lệ kèo bóng đá tối nay cấp độ khác chỉ tạo ra tỷ lệ kèo bóng đá tối nay thông điệp khác nhau mức độ ưu tiên. Liệu tỷ lệ kèo bóng đá tối nay thông điệp của một cụ thể Ưu tiên được báo cáo cho khách hàng, được viết cho 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.

quote_literal (chuỗi)

21415_21617quote_literalTrả về Undef về đầu vào chưa hoàn thành; Nếu đối số có thể là hoàn tác,quote_nullablethường xuyên phù tỷ lệ kèo bóng đá tối nay hơn.

quote_nullable (chuỗi)

Trả về chuỗi đã cho được trích dẫn phù tỷ lệ kèo bóng đá tối nay để được sử dụng làm một chuỗi theo nghĩa đen trong một chuỗi câu lệnh SQL; Hoặc, nếu Đối số là không hoàn hảo, trả lại chuỗi "null" chưa được trích xuất. Nhúng đơn và các dấu gạch chéo ngược được nhân đôi.

quote_ident (chuỗi)

Trả về chuỗi đã cho được trích dẫn phù tỷ lệ kèo bóng đá tối nay để được sử dụng làm một định danh trong chuỗi câu lệnh SQL. Trích dẫn là chỉ thêm nếu cần thiết (tức là, nếu chuỗi chứa Các ký tự không nhận dạng hoặc sẽ được xếp lại trường tỷ lệ kèo bóng đá tối nay). Báo giá nhúng được nhân đôi đúng cách.

decode_bytea (chuỗi)

Trả về dữ liệu nhị phân chưa được ghi nhận được biểu thị bởi nội dung của chuỗi đã cho, phải làbyteađược mã hóa.

encode_bytea (chuỗi)

Trả lạibyteaMẫu được mã hóa của Nội dung dữ liệu nhị phân của chuỗi đã cho.

encode_array_literal (mảng)
encode_array_literal (mảng, Delimiter)

Trả về nội dung của mảng được tham chiếu dưới dạng Chuỗi ở định dạng theo nghĩa đen (xem23937_23953). Trả lại giá trị đối số không được thay đổi nếu nó không phải là một tham chiếu đến một mảng. Phân định được sử dụng giữa tỷ lệ kèo bóng đá tối nay yếu tố của Mảng mặc định theo nghĩa đen thành "," Nếu một dấu phân cách không được chỉ định hoặc không được xác định.

encode_typed_literal (giá trị, typename)

Chuyển đổi biến Perl thành giá trị của kiểu dữ liệu được truyền dưới dạng đối số thứ hai và trả về một chuỗi Đại diện của giá trị này. Xử lý chính xác lồng nhau mảng và giá trị của các loại tổng tỷ lệ kèo bóng đá tối nay.

encode_array_constructor (mảng)

Trả về nội dung của mảng được tham chiếu dưới dạng Chuỗi ở định dạng trình xây dựng mảng (xemPhần 4.2.12). tỷ lệ kèo bóng đá tối nay giá trị riêng lẻ được trích dẫn bằng cách sử dụngQUOTE_NULLABLE. Trả lại Giá trị đối số, được trích dẫn bằngQUOTE_NULLABLE, Nếu nó không phải là một tài liệu tham khảo đến một mảng.

looking_like_number (chuỗi)

Trả về giá trị thực nếu nội dung của Chuỗi trông giống như một số, theo Perl, trả về sai nếu không. Trả về Undef nếu đối số không hoàn hảo. Không gian dẫn đầu và dấu vết bị bỏ qua.INFVô cựcđược coi là số.

is_array_ref (Đối số)

Trả về giá trị thực nếu đối số đã cho có thể là được coi là một tham chiếu mảng, nghĩa là, nếu Đối số làmảnghoặcPostgresql :: Inserver :: mảng. Trả về sai nếu không thì.