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
, Fetch
hoặ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.
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ành
mệ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,SQL
Từ khóa là tùy chọn, vì vậy sử kèo chấp bóng đá hôm nayMô tả
và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ỏ quaSQL
Từ 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ả
vàFetch
câu lệnh,thành
vàSử kèo chấp bóng đá hôm nay
Từ 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ên
giá trịnum
:hostvar
=trường
;
num
có 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ại
là9
, datetime_interval_code
sẽ có giá trị1
chongày
, 2
chothời gian
, 3
choDấu thời gian
, 4
choThời gian với múi giờ
hoặc5
chodấ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áo
vàMở
Câu lệnh, Hiệu ứng củathành
vàSử kèo chấp bóng đá hôm nay
Từ 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ả SQL
là 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:tên
EXEC SQL SET mô tảtên
giá trịnum
trường
=:hostvar
;
PostgreSQL hỗ trợ lấy thêm một bản ghi trong mộtFetch
Câ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;
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ằngSQL
Từ 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ành
vàsử kèo chấp bóng đá hôm nay
Từ 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ành
Từ 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à:
Chuẩn bị truy vấn và khai báo con trỏ cho nó.
khai báo SQLDA cho kèo chấp bóng đá hôm nay hàng kết quả.
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ố).
Mở một con trỏ với SQLDA đầu vào.
Lấy hàng từ con trỏ và lưu trữ chúng vào đầu ra sqlda.
Đọ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).
Đóng con trỏ.
Miễn phí vùng bộ nhớ được phân bổ cho SQLDA đầu vào.
SQLDA sử kèo chấp bóng đá hôm nay ba loại cấu trúc dữ liệu:SQLDA_T
, SQLVAR_T
vàstruct sqlname
.
24498_24684
Loại cấu trúcSQLDA_T
là loại của sqlda thực tế. Nó giữ một kỷ lục.SQLDA_T
Cấu trúc có thể được kết nối trong danh sách được liên kết với con trỏ trongdesc_next
trườ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_next
Con trỏ trong mỗiSQLDA_T
Node.
Định nghĩa củaSQLDA_T
IS:
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áo
hoặcthực thi
Câu lệnh sử kèo chấp bóng đá hôm naysử kèo chấp bóng đá hôm nay
Từ 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 thi
hoặcFetch
Câu lệnh, giá trị của nó giống nhưSQLD
câ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_next
Giữ 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ả.
Loại cấu trúcSQLVAR_T
giữ 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 ecpgttype
inECPGTYPE.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.
Astruct sqlname
Cấ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_T
Cấ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à:
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à:
khai báoSQLDA_T
Cấu trúc để nhận tập kết quả.
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.
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_T
Cấu trúc.
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_T
Cấu trúc.
Chuyển đến hàng tiếp theo (SQLDA_T
Cấu trúc) bằng cách làm theodesc_next
Con trỏ, một thành viên củaSQLDA_T
Cấu trúc.
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_T
Cấ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ộtFetch
Ví 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_T
Cấ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 traSQLTYPE
Giá trị, một thành viên củaSQLVAR_T
Cấ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ừSQLVAR
Trường đến biến máy chủ.
char var_buf [1024];
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à:
Tạo một truy vấn đã chuẩn bị (câu lệnh đã chuẩn bị)
Khai báo cấu trúc sqlda_t dưới dạng đầu vào sqlda.
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.
Đặ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ổ.
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_T
Cấ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);
Đâ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ệuPostgres
và 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
, sqldata
vàsqllen
trongSQLVAR
Cấ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ọiFetch
Liê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_T
Cấ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_T
Cấ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)