Phiên bản được hỗ trợ:hiệ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 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4
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 kèo chấp bóng đá hôm nay phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

34.7. Sử dụng kèo chấp bóng đá hôm nay khu vực mô tả#

Vùng mô tả SQL là một phương pháp tinh vi hơn để xử lý kết quả của AChọn, Fetchhoặc Amô tảTuyên bố. Một khu vực mô tả SQL nhóm dữ liệu của một hàng dữ liệu cùng với kèo chấp bóng đá hôm nay mục siêu dữ liệu thành một cấu trúc dữ liệu.

34.7.1. kèo chấp bóng đá hôm nay khu vực mô tả SQL được đặt tên#

Một kèo chấp bóng đá hôm nay mô tả SQL có tên bao gồm một tiêu đề, chứa thông tin liên quan đến toàn bộ mô tả và một hoặc nhiều kèo chấp bóng đá hôm nay mô tả mục, về cơ bản mỗi mô tả một cột trong hàng kết quả.

Trước khi bạn có thể sử kèo chấp bóng đá hôm nay khu vực mô tả SQL, bạn cần phân bổ một:

EXEC SQL phân bổ mô tảđịnh danh;

Định danh đóng vai trò làHồiTên biếncủa kèo chấp bóng đá hôm nay mô tả. Khi bạn không cần mô tả nữa, bạn nên giải quyết nó:

EXEC SQL DEALLOCATE MÔ TẢđịnh danh;

Để sử kèo chấp bóng đá hôm nay khu vực mô tả, chỉ định nó làm mục tiêu lưu trữ trong mộtthànhmệnh đề, thay vì liệt kê kèo chấp bóng đá hôm nay biến máy chủ:

12895_12960

Nếu tập kết quả trống, vùng mô tả vẫn sẽ chứa siêu dữ liệu từ truy vấn, tức là, tên trường.

vì chưa thực hiện kèo chấp bóng đá hôm nay truy vấn đã chuẩn bị,mô tảCâu lệnh có thể được sử kèo chấp bóng đá hôm nay để lấy siêu dữ liệu của tập kết quả:

EXEC SQL BẮT ĐẦU phần khai báo;

Trước PostgreSQL 9.0,SQLTừ khóa là tùy chọn, vì vậy sử kèo chấp bóng đá hôm nayMô tảMô tả SQLĐược sản xuất có tên là kèo chấp bóng đá hôm nay khu vực mô tả SQL. Bây giờ nó là bắt buộc, bỏ quaSQLTừ khóa tạo ra kèo chấp bóng đá hôm nay khu vực mô tả SQLDA, xemPhần 34.7.2.

inMô tảFetchcâu lệnh,thànhSử kèo chấp bóng đá hôm nayTừ khóa có thể được sử kèo chấp bóng đá hôm nay để tương tự: chúng tạo ra tập kết quả và siêu dữ liệu trong khu vực mô tả.

Bây giờ làm thế nào để bạn đưa dữ liệu ra khỏi khu vực mô tả? Bạn có thể nghĩ về khu vực mô tả như một cấu trúc với kèo chấp bóng đá hôm nay trường được đặt tên.

EXEC SQL Nhận mô tảtên :hostvar=trường;

Hiện tại, chỉ có một trường tiêu đề được xác định:Đếm, cho biết có bao nhiêu kèo chấp bóng đá hôm nay mô tả vật phẩm tồn tại (nghĩa là có bao nhiêu cột được chứa trong kết quả). Biến máy chủ cần phải thuộc loại số nguyên.

EXEC SQL Nhận mô tảtêngiá trịnum :hostvar=trường;

numcó thể là một số nguyên theo nghĩa đen hoặc biến chủ chứa một số nguyên. kèo chấp bóng đá hôm nay trường có thể là:

Cardinality(số nguyên) #

Số lượng hàng trong tập kết quả

Data #

Mục dữ liệu thực tế (do đó, loại dữ liệu của trường này phụ thuộc vào truy vấn)

datetime_interval_code(số nguyên) #

khiloại9, datetime_interval_codesẽ có giá trị1chongày, 2chothời gian, 3choDấu thời gian, 4choThời gian với múi giờhoặc5chodấu thời gian với múi giờ.

datetime_interval_precision(số nguyên) #

Không được triển khai

Chỉ báo(số nguyên) #

Chỉ báo (chỉ ra giá trị null hoặc cắt giảm giá trị)

key_member(số nguyên) #

không được triển khai

LEGN(số nguyên) #

Độ dài của mốc thời gian trong ký tự

tên(chuỗi) #

Tên của cột

nullable(số nguyên) #

không được triển khai

octet_length(số nguyên) #

Độ dài của biểu diễn ký tự của mốc thời gian trong byte

Chính xác(số nguyên) #

độ chính xác (cho loạiSố)

return_length(số nguyên) #

Độ dài của mốc thời gian trong ký tự

return_octet_length(số nguyên) #

Độ dài của biểu diễn ký tự của mốc thời gian trong byte

quy mô(số nguyên) #

tỷ lệ (cho loạiSố)

loại(Số nguyên) #

Mã số của kiểu dữ liệu của cột

inthực thi, khai báoMởCâu lệnh, Hiệu ứng củathànhSử kèo chấp bóng đá hôm nayTừ khóa là khác nhau. Vùng mô tả cũng có thể được xây dựng thủ công để cung cấp kèo chấp bóng đá hôm nay tham số đầu vào cho truy vấn hoặc con trỏ vàSử kèo chấp bóng đá hôm nay mô tả SQLtênlà cách để chuyển kèo chấp bóng đá hôm nay tham số đầu vào vào một truy vấn được tham số hóa. Tuyên bố để xây dựng một khu vực mô tả SQL có tên bên dưới:

EXEC SQL SET mô tảtêngiá trịnum trường=:hostvar;

PostgreSQL hỗ trợ lấy thêm một bản ghi trong mộtFetchCâu lệnh và lưu trữ dữ liệu trong kèo chấp bóng đá hôm nay biến máy chủ trong trường hợp này giả định rằng biến là một mảng. Ví dụ.:

EXEC SQL bắt đầu khai báo;

34.7.2. kèo chấp bóng đá hôm nay khu vực mô tả SQLDA#

Vùng mô tả SQLDA là cấu trúc ngôn ngữ C cũng có thể được sử kèo chấp bóng đá hôm nay để có được thiết lập kết quả và siêu dữ liệu của truy vấn. Một cấu trúc lưu trữ một bản ghi từ tập kết quả.

EXEC SQL bao gồm sqlda.h;

Lưu ý rằngSQLTừ khóa bị bỏ qua. kèo chấp bóng đá hôm nay đoạn văn về kèo chấp bóng đá hôm nay trường hợp sử dụng củathànhsử kèo chấp bóng đá hôm nayTừ khóa trongPhần 34.7.1Cũng áp kèo chấp bóng đá hôm nay ở đây với một bổ sung. Trong amô tảtuyên bốMô tảTừ khóa có thể bị bỏ qua hoàn toàn nếuthànhTừ khóa được sử kèo chấp bóng đá hôm nay:

EXEC SQL Mô tả đã chuẩn bị_statement vào mysqlda;

Lưu lượng chung của một chương trình sử kèo chấp bóng đá hôm nay sqlda là:

  1. Chuẩn bị truy vấn và khai báo con trỏ cho nó.

  2. khai báo SQLDA cho kèo chấp bóng đá hôm nay hàng kết quả.

  3. Khai báo SQLDA cho kèo chấp bóng đá hôm nay tham số đầu vào và khởi tạo chúng (phân bổ bộ nhớ, cài đặt tham số).

  4. Mở một con trỏ với SQLDA đầu vào.

  5. Lấy hàng từ con trỏ và lưu trữ chúng vào đầu ra sqlda.

  6. Đọc kèo chấp bóng đá hôm nay giá trị từ đầu ra SQLDA vào kèo chấp bóng đá hôm nay biến máy chủ (với chuyển đổi nếu cần thiết).

  7. Đóng con trỏ.

  8. Miễn phí vùng bộ nhớ được phân bổ cho SQLDA đầu vào.

34.7.2.1. Cấu trúc dữ liệu SQLDA#

SQLDA sử kèo chấp bóng đá hôm nay ba loại cấu trúc dữ liệu:SQLDA_T, SQLVAR_Tstruct sqlname.

Tip

24498_24684

34.7.2.1.1. cấu trúc sqlda_t#

Loại cấu trúcSQLDA_Tlà loại của sqlda thực tế. Nó giữ một kỷ lục.SQLDA_TCấu trúc có thể được kết nối trong danh sách được liên kết với con trỏ trongdesc_nexttrường, do đó đại diện cho một bộ sưu tập kèo chấp bóng đá hôm nay hàng được đặt hàng. Vì vậy, khi hai hoặc nhiều hàng được tìm nạp, ứng dụng có thể đọc chúng bằng cách làm theodesc_nextCon trỏ trong mỗiSQLDA_TNode.

Định nghĩa củaSQLDA_TIS:

struct sqlda_struct

Ý nghĩa của kèo chấp bóng đá hôm nay trường là:

SQLDAID #

Nó chứa chuỗi chữ"SQLDA".

SQLDABC #

Nó chứa kích thước của không gian được phân bổ trong byte.

SQLN #

Nó chứa số lượng tham số đầu vào cho truy vấn được tham số hóa trong trường hợp nó được chuyển vàoMở, khai báohoặcthực thiCâu lệnh sử kèo chấp bóng đá hôm naysử kèo chấp bóng đá hôm nayTừ khóa. Trong trường hợp nó được sử kèo chấp bóng đá hôm nay làm đầu ra củaChọn, thực thihoặcFetchCâu lệnh, giá trị của nó giống nhưSQLDcâu lệnh

SQLD #

Nó chứa số lượng trường trong tập kết quả.

desc_next #

Nếu truy vấn trả về nhiều bản ghi, nhiều cấu trúc SQLDA được liên kết được trả về vàdesc_nextGiữ một con trỏ tới mục tiếp theo trong danh sách.

SQLVAR #

Đây là mảng của kèo chấp bóng đá hôm nay cột trong tập kết quả.

34.7.2.1.2. cấu trúc sqlvar_t#

Loại cấu trúcSQLVAR_Tgiữ giá trị cột và siêu dữ liệu như loại và độ dài. Định nghĩa của loại là:

struct sqlvar_struct

Ý nghĩa của kèo chấp bóng đá hôm nay trường là:

SQLTYPE #

Chứa định danh loại của trường. Đối với kèo chấp bóng đá hôm nay giá trị, xemenum ecpgttypeinECPGTYPE.H.

sqllen #

Chứa độ dài nhị phân của trường. ví dụ: 4 byte choECPGT_INT.

Sqldata #

chỉ vào dữ liệu. Định dạng của dữ liệu được mô tả trongPhần 34.4.4.

SQLIND #

chỉ vào chỉ báo null. 0 có nghĩa là không null, -1 có nghĩa là null.

sqlname #

Tên của trường.

34.7.2.1.3. Cấu trúc cấu trúc sqlname#

Astruct sqlnameCấu trúc giữ tên cột. Nó được sử kèo chấp bóng đá hôm nay như một thành viên củaSQLVAR_TCấu trúc. Định nghĩa của cấu trúc là:

#define có tênatalen 64

Ý nghĩa của kèo chấp bóng đá hôm nay trường là:

LEGN #

Chứa độ dài của tên trường.

Data #

chứa tên trường thực tế.

34.7.2.2. Lấy một tập kết quả bằng cách sử kèo chấp bóng đá hôm nay sqlda#

kèo chấp bóng đá hôm nay bước chung để truy xuất kết quả truy vấn được đặt thông qua SQLDA là:

  1. khai báoSQLDA_TCấu trúc để nhận tập kết quả.

  2. thực thiFetch/thực thi/Mô tảkèo chấp bóng đá hôm nay lệnh để xử lý truy vấn chỉ định SQLDA được khai báo.

  3. Kiểm tra số lượng bản ghi trong kết quả được đặt bằng cách xemSQLN, một thành viên củaSQLDA_TCấu trúc.

  4. Nhận kèo chấp bóng đá hôm nay giá trị của mỗi cột từSQLVAR [0], SQLVAR [1], v.v., kèo chấp bóng đá hôm nay thành viên củaSQLDA_TCấu trúc.

  5. Chuyển đến hàng tiếp theo (SQLDA_TCấu trúc) bằng cách làm theodesc_nextCon trỏ, một thành viên củaSQLDA_TCấu trúc.

  6. Lặp lại ở trên khi bạn cần.

Đây là một ví dụ truy xuất kết quả được đặt thông qua sqlda.

Đầu tiên, khai báo ASQLDA_TCấu trúc để nhận tập kết quả.

SQLDA_T *SQLDA1;

Tiếp theo, chỉ định SQLDA trong một lệnh. Đây là mộtFetchVí dụ về lệnh.

34215_34272

Chạy vòng lặp theo danh sách được liên kết để truy xuất kèo chấp bóng đá hôm nay hàng.

sqlda_t *cur_sqlda;

Bên trong vòng lặp, chạy vòng lặp khác để truy xuất từng dữ liệu cột (SQLVAR_TCấu trúc) của hàng.

for (i = 0; i <cur_sqlda- sqld; i ++)

Để nhận giá trị cột, hãy kiểm traSQLTYPEGiá trị, một thành viên củaSQLVAR_TCấu trúc. Sau đó, chuyển sang một cách thích hợp, tùy thuộc vào loại cột, để sao chép dữ liệu từSQLVARTrường đến biến máy chủ.

char var_buf [1024];

34.7.2.3. Vượt qua kèo chấp bóng đá hôm nay tham số truy vấn bằng cách sử dụng sqlda#

kèo chấp bóng đá hôm nay bước chung để sử dụng SQLDA để chuyển kèo chấp bóng đá hôm nay tham số đầu vào cho truy vấn đã chuẩn bị là:

  1. Tạo một truy vấn đã chuẩn bị (câu lệnh đã chuẩn bị)

  2. Khai báo cấu trúc sqlda_t dưới dạng đầu vào sqlda.

  3. Phân bổ kèo chấp bóng đá hôm nay bộ nhớ (dưới dạng cấu trúc SQLDA_T) cho đầu vào sqlda.

  4. Đặt (sao chép) kèo chấp bóng đá hôm nay giá trị đầu vào trong bộ nhớ được phân bổ.

  5. Mở con trỏ với việc chỉ định SQLDA đầu vào.

Đây là một ví dụ.

Đầu tiên, tạo một câu lệnh đã chuẩn bị.

EXEC SQL BẮT ĐẦU phần khai báo;

Tiếp theo, phân bổ bộ nhớ cho SQLDA và đặt số lượng tham số đầu vào trongSQLN, một biến thành viên củaSQLDA_TCấu trúc. Khi cần có hai hoặc nhiều tham số đầu vào cho truy vấn đã chuẩn bị, ứng kèo chấp bóng đá hôm nay phải phân bổ không gian bộ nhớ bổ sung được tính bằng (nr. Của params - 1) * sizeof (sqlvar_t).

SQLDA_T *SQLDA2;

Sau khi phân bổ bộ nhớ, lưu trữ kèo chấp bóng đá hôm nay giá trị tham số vàoSQLVAR []Mảng. ."Postgres", có loại chuỗi và1, có loại số nguyên.

SQLDA2- SQLVAR [0] .SQLTYPE = ECPGT_CHAR;

Bằng cách mở con trỏ và chỉ định SQLDA được thiết lập trước, kèo chấp bóng đá hôm nay tham số đầu vào được chuyển đến câu lệnh đã chuẩn bị.

EXEC SQL Mở Cur1 bằng cách sử kèo chấp bóng đá hôm nay mô tả SQLDA2;

Cuối cùng, sau khi sử kèo chấp bóng đá hôm nay SQLDAS đầu vào, không gian bộ nhớ được phân bổ phải được giải phóng rõ ràng, không giống như SQLDA được sử kèo chấp bóng đá hôm nay để nhận kết quả truy vấn.

miễn phí (sqlda2);

34.7.2.4. Một ứng kèo chấp bóng đá hôm nay mẫu sử kèo chấp bóng đá hôm nay sqlda#

Đây là một chương trình ví dụ, mô tả cách tìm nạp kèo chấp bóng đá hôm nay thống kê truy cập của cơ sở dữ liệu, được chỉ định bởi kèo chấp bóng đá hôm nay tham số đầu vào, từ kèo chấp bóng đá hôm nay danh mục hệ thống.

Ứng kèo chấp bóng đá hôm nay này kết hợp hai bảng hệ thống, pg_database và pg_stat_database trên cơ sở dữ liệu OID và cũng tìm thấy và hiển thị số liệu thống kê cơ sở dữ liệu được lấy bởi hai tham số đầu vào (cơ sở dữ liệuPostgresvà OID1).

Đầu tiên, khai báo SQLDA cho đầu vào và SQLDA cho đầu ra.

EXEC SQL bao gồm sqlda.h;

Tiếp theo, kết nối với cơ sở dữ liệu, chuẩn bị một câu lệnh và khai báo con trỏ cho câu lệnh đã chuẩn bị.

int

Tiếp theo, đặt một số giá trị vào SQLDA đầu vào cho kèo chấp bóng đá hôm nay tham số đầu vào. Phân bổ bộ nhớ cho SQLDA đầu vào và đặt số lượng tham số đầu vào thànhSQLN. Lưu trữ loại, giá trị và độ dài giá trị thànhSQLTYPE, sqldatasqllentrongSQLVARCấu trúc.

/* Tạo cấu trúc SQLDA cho kèo chấp bóng đá hôm nay tham số đầu vào. */

Sau khi thiết lập SQLDA đầu vào, hãy mở một con trỏ bằng SQLDA đầu vào.

/* Mở một con trỏ với kèo chấp bóng đá hôm nay tham số đầu vào. */

Tìm nạp kèo chấp bóng đá hôm nay hàng vào đầu ra SQLDA từ con trỏ đã mở. (Nói chung, bạn phải gọiFetchLiên tục trong vòng lặp, để tìm nạp tất cả kèo chấp bóng đá hôm nay hàng trong tập kết quả.)

WHER (1)

Tiếp theo, hãy truy xuất kèo chấp bóng đá hôm nay bản ghi được tìm nạp từ SQLDA, bằng cách tuân theo danh sách được liên kết củaSQLDA_TCấu trúc.

for (cur_sqlda = sqlda1;

Đọc từng cột trong bản ghi đầu tiên. Số lượng cột được lưu trữ trongSQLD, Dữ liệu thực tế của cột đầu tiên được lưu trữ trongSQLVAR [0], Cả hai thành viên củaSQLDA_TCấu trúc.

/* In mỗi cột trong một hàng. */

Bây giờ, dữ liệu cột được lưu trữ trong biếnV. Sao chép mọi mốc thời gian vào kèo chấp bóng đá hôm nay biến máy chủ, nhìn vàoV.SQLTYPEĐối với loại cột.

Switch (v.sqltype)

Đóng con trỏ sau khi xử lý tất cả kèo chấp bóng đá hôm nay bản ghi và ngắt kết nối khỏi cơ sở dữ liệu.

EXEC SQL Đóng Cur1;

Toàn bộ chương trình được hiển thị trongVí dụ 34.1.

Ví dụ 34.1. Ví dụ chương trình SQLDA

#include <stdlib.h

Đầu ra của ví dụ này sẽ trông giống như sau (một số số sẽ thay đổi).

oid = 1 (loại: 1)