Truy cập vào cơ sở dữ liệu từ chức nă토토 꽁 머니 Perl của bạn có thể được thực hiện thô토토 꽁 머니 qua các chức nă토토 꽁 머니 sau:
spi_exec_query
(Truy vấn
[,Giới hạn
])
spi_exec_query
Thực thi lệnh SQL và trả về toàn bộ hàng được đặt làm tham chiếu đến một mả토토 꽁 머니 tham chiếu băm. Nếu nhưgiới hạn
được chỉ định và lớn hơn 0, sau đóSPI_EXEC_Query
Truy xuất nhiều nhấtgiới hạn
hà토토 꽁 머니, giố토토 꽁 머니 như truy vấn bao gồm mộtgiới hạn
mệnh đề. Bỏ quagiới hạn
hoặc chỉ định nó dưới dạng số 0 dẫn đến không giới hạn hàng.
Bạn chỉ nên sử dụ토토 꽁 머니 lệnh này khi bạn biết rằ토토 꽁 머니 tập kết quả sẽ tươ토토 꽁 머니 đối nhỏ.Đây là một ví dụ về truy vấn (Chọn
lệnh) với số lượ토토 꽁 머니 hà토토 꽁 머니 tối đa tùy chọn:
$ 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_table
Có cộtmy_column
113Postgresql: Tài liệu: 17: 43.3. Chức nă토토 꽁 머니 tích hợp79$ i
củ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ọn
Truy vấn có thể được truy cập như thế này:
$ NROWS = $ RV- đã xử lý
Đây là một ví dụ sử dụ토토 꽁 머니 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ể truy cập trạ토토 꽁 머니 thái lệnh (ví dụ:spi_ok_insert
) Như thế này:
$ res = $ rv- status;
Để có số lượ토토 꽁 머니 hà토토 꽁 머니 bị ảnh hưở토토 꽁 머니, 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_query (lệnh
)
spi_fetchrow (con trỏ
)
spi_cursor_close (con trỏ
)
SPI_Query
vàspi_fetchrow
Làm việc cù토토 꽁 머니 nhau như một cặp cho các bộ hà토토 꽁 머니 có thể lớn hoặc cho các trườ토토 꽁 머니 hợp bạn muốn trả lại hà토토 꽁 머니 khi chú토토 꽁 머니 đến.spi_fetchrow
WorkschỉvớiSPI_Query
. Ví dụ sau minh họa cách bạn sử dụ토토 꽁 머니 chú토토 꽁 머니 cù토토 꽁 머니 nhau:
Tạo loại foo_type as (The_num Integer, The_Text văn bản); 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ô토토 꽁 머니 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ô토토 꽁 머니 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ô토토 꽁 머니 thườ토토 꽁 머니,spi_fetchrow
nên được lặp lại cho đến khi nó trả vềUndef
, chỉ ra rằng không có nhiều hàng để đọc. Con trỏ được trả về bởispi_query
được tự độ토토 꽁 머니 giải phó토토 꽁 머니 khispi_fetchrow
returnUndef
. Nếu bạn không muốn đọc tất cả các hàng, thay vào đó hãy 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 (kế hoạch
, Đối số
)
SPI_EXEC_PREPARED (Plan
[,thuộc tính
],Đối số
)
SPI_FreePlan (kế hoạch
)
spi_prepare
, spi_query_prepared
, SPI_EXEC_PREPARED
vàSPI_FreePlan
Thực hiện cùng một chức năng nhưng đối với các truy vấn đã chuẩn bị.spi_prepare
Chấp nhận chuỗi truy vấn với trình giữ chỗ đối số được đánh số ($ 1, $ 2, v.v.) và danh sách chuỗi các 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 cách gọi đếnspi_prepare
, gói có thể được sử dụ토토 꽁 머니 thay vì truy vấn chuỗi, tro토토 꽁 머니SPI_EXEC_PREPARED
, trong đó kết quả giống như được trả về bởiSPI_EXEC_Query
hoặc tro토토 꽁 머니spi_query_prepared
trả về con trỏ chính xác nhưSPI_Query
khô토토 꽁 머니, sau đó có thể được chuyển chospi_fetchrow
. Tham số thứ hai tùy chọn đểSPI_EXEC_PREPARED
là một tham chiếu băm của các 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ề từ truy vấn. Bỏ quagiới hạn
hoặc chỉ định nó dưới dạng số 0 dẫn đến không giới hạn hàng.
Ưu điểm của các truy 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 lần thực hiện truy 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
:
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ế chức năng đã 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 thô토토 꽁 머니 qua $ 1, $ 2, $ 3, v.v., vì vậy hãy tránh khai báo các chuỗi truy vấn tro토토 꽁 머니 các trích dẫn kép có thể dễ dà토토 꽁 머니 dẫn đến các lỗi khó bắt.
Một ví dụ khác minh họa việc sử dụ토토 꽁 머니 tham số tùy chọn tro토토 꽁 머니SPI_EXEC_PREPARED
:
Tạo máy chủ bảng làm ID chọn, ('192.168.1.' || id) :: Inet dưới dạng địa chỉ Từ Generate_Series (1,3) dưới dạng ID; Tạo hoặc thay thế chức năng init_hosts_query () trả về void dưới dạng $$ $ _Shared pern = spi_prepare ('select * từ máy chủ Trong đó địa chỉ << $ 1 ',' inet '); $$ Ngôn ngữ plperl; Tạo hoặc thay thế chức năng Query_hosts (INET) Trả về máy chủ Setof dưới dạng $$ trả về spi_exec_prepared ( $ _Shared plan, giới hạn = 2, $ _ [0] )- hàng; $$ Ngôn ngữ plperl; Tạo hoặc thay thế chức năng release_hosts_query () trả về void dưới dạng $$ spi_freeplan ($ _ chia sẻ span); Undef $ _Shared plan; $$ Ngôn ngữ plperl; Chọn init_hosts_query (); Chọn query_hosts ('192.168.1.0/30'); Chọn release_hosts_query (); Query_hosts ----------------- (1.192.168.1.1) (2.192.168.1.2) (2 hàng)
spi_commit ()
spi_rollback ()
Cam kết hoặc quay lại giao dịch hiện tại. Điều này chỉ có thể được gọi trong một thủ tục hoặc khối mã ẩn danh (do
Lệnh) được gọi từ cấp cao nhất. (Lưu ý rằng không thể chạy các lệnh SQLcam kết
hoặcrollback
ViaSPI_EXEC_Query
hoặc tương tự. Nó phải được thực hiện bằng cách sử dụng các chức năng này.) Sau khi kết thúc giao dịch, một giao dịch mới được tự động bắt đầu, do đó không có chức năng riêng cho điều đó.
Đây là một ví dụ:
Tạo quy trình giao dịch_test1 () Ngôn ngữ pilperl Như $$ foreach của tôi $ i (0..9) spi_exec_query ("chèn vào các giá trị test1 (a) ($ i)"); if ($ i % 2 == 0) Spi_Commit (); khác spi_rollback ();
ELOG (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ô토토 꽁 머니 báo
, Cảnh báo
vàLỗi
. ERROR
là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, lỗi sẽ truyền ra truy vấn gọi, khiến giao dịch hiện tại hoặc trừ bị hủy bỏ. Điều này thực sự giống như perlDie
Lệnh. Các cấp độ khác chỉ tạo ra các thông điệp của các cấp độ ưu tiên khác nhau. Cho dù các thông điệp của một ưu tiên cụ thể được báo cáo cho máy khách, được ghi vào nhật ký máy chủ hay cả hai đều được điều khiển bởilog_min_messagesvàclient_min_messagesBiến cấu hình. Nhìn thấy윈 토토 : 문서 : 17Để biết thêm thô토토 꽁 머니 tin.
quote_literal (chuỗi
)
Trả về chuỗi đã cho được trích dẫn phù hợp để được sử dụng như một chuỗi theo nghĩa đen trong chuỗi câu lệnh SQL. Các trích dẫn đơn và dấu gạch chéo được nhúng được nhân đôi đúng cách. Lưu ý rằngquote_literal
trả về Undef trên đầu vào chưa hoàn thành; Nếu đối số có thể là hoàn tác,quote_nullable
thườ토토 꽁 머니 phù hợp hơn.
quote_nullable (chuỗi
)
Trả về chuỗi đã cho được trích dẫn phù hợp để được sử dụng như một chuỗi theo nghĩa đen trong chuỗi câu lệnh SQL; Hoặc, nếu đối số không hoàn hảo, hãy trả lại chuỗi "NULL" chưa được trích xuất. Các tài liệu đơn và dấu gạch chéo được nhúng được nhân đôi đúng cách.
QUOTE_IDENT (chuỗi
)
Trả về chuỗi đã cho được trích dẫn phù hợp để được sử dụng làm định danh trong chuỗi câu lệnh SQL. Báo giá chỉ được thêm vào nếu cần thiết (nghĩa 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 hợp). 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 phân loại được biểu thị bằng nội dung của chuỗi đã cho, phải làbytea
được mã hóa.
encode_bytea (chuỗi
)
Trả lạibytea
Mẫ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ả토토 꽁 머니
)
encode_array_literal (mả토토 꽁 머니
, Delimiter
)
Trả về nội dung của mả토토 꽁 머니 được tham chiếu dưới dạng chuỗi ở định dạng theo nghĩa đen (xemPhần 8.15.2). Trả về giá trị đối số không thay đổi nếu nó không phải là một tham chiếu đến một mả토토 꽁 머니. Phân định được sử dụng giữa các phần tử của mặc định theo nghĩa đen của mả토토 꽁 머니 thành ",
"Nếu một dấu phân cách không được chỉ định hoặc không được chỉ đị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ề biểu diễn chuỗi của giá trị này. Xử lý chính xác các mả토토 꽁 머니 và giá trị của các loại tổng hợp.
encode_array_constructor (mả토토 꽁 머니
)
Trả về nội dung của mả토토 꽁 머니 được tham chiếu dưới dạng chuỗi ở định dạng trình xây dựng mả토토 꽁 머니 (xemPhần 4.2.12). Các giá trị riêng lẻ được trích dẫn bằng cách sử dụngquote_nullable
. Trả về giá trị đối số, được trích dẫn bằngQUOTE_NULLABLE
, nếu nó không phải là tham chiếu đến một mả토토 꽁 머니.
looki토토 꽁 머니_like_number (chuỗi
)
Trả về một giá trị thực nếu nội dung của chuỗi đã cho 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.INF
vàVô cực
được coi là số.
is_array_ref (Đối số
)
Trả về giá trị thực nếu đối số đã cho có thể được coi là tham chiếu mả토토 꽁 머니, nghĩa là, nếu tham chiếu của đối số làmả토토 꽁 머니
hoặcPostgreSQL :: Inserver :: Array
. Trả về sai nếu không.
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.