Vùng mô tả 와이즈 토토 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ả 와이즈 토토 nhóm dữ liệu của một hàng dữ liệu cùng với các mục siêu dữ liệu thành một cấu trúc dữ liệu. Siêu dữ liệu đặc biệt hữu ích khi thực hiện các câu lệnh 와이즈 토토 động, trong đó bản chất của các cột kết quả có thể không được biết trước trước thời hạn. Postgre와이즈 토토 cung cấp hai cách để sử dụng các khu vực mô tả: Các khu vực mô tả 와이즈 토토 được đặt tên và các sqldas cấu trúc c.
Một khu vực mô tả 와이즈 토토 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 khu vực 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ử dụng khu vực mô tả 와이즈 토토, bạn cần phân bổ một:
EXEC 와이즈 토토 phân bổ mô tảđịnh danh
;
Định danh đóng vai trò làHồiTên biếnHàngcủa khu vực mô tả. Khi bạn không cần mô tả nữa, bạn nên giải quyết nó:
EXEC 와이즈 토토 DEALLOCATE MÔ TẢđịnh danh
;
Để sử dụng 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ê các biến máy chủ:
12422_12487
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 các truy vấn đã chuẩn bị,mô tả
Câu lệnh có thể được sử dụng để lấy siêu dữ liệu của tập kết quả:
EXEC 와이즈 토토 BẮT ĐẦU phần khai báo; char * 와이즈 토토_STMT = "Chọn * từ Bảng1"; EXEC 와이즈 토토 END TUYÊN BỐ TUYÊN BỐ; EXEC 와이즈 토토 Chuẩn bị STMT1 từ: 와이즈 토토_STMT; EXEC 와이즈 토토 Mô tả STMT1 vào Bộ mô tả 와이즈 토토 MyDesc;
Trước Postgresql 9.0,와이즈 토토
Từ khóa là tùy chọn, vì vậy sử dụngMô tả
vàMô tả 와이즈 토토
Được sản xuất có tên là các khu vực mô tả 와이즈 토토. Bây giờ nó là bắt buộc, bỏ qua와이즈 토토
Từ khóa tạo ra các khu vực mô tả 와이즈 토토DA, xemPhần 36.7.2.
inMô tả
vàFetch
Câu lệnh, Thethành
vàsử dụng
Từ khóa có thể được sử dụng để 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 các trường được đặt tên. Để lấy giá trị của trường từ tiêu đề và lưu trữ nó vào một biến máy chủ, hãy sử dụng lệnh sau:
EXEC 와이즈 토토 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 khu vực 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. Để nhận một trường từ vùng mô tả mục, hãy sử dụng lệnh sau:
EXEC 와이즈 토토 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. Các 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
Scale
(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, ảnh hưởng củathành
vàsử dụng
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 các tham số đầu vào cho truy vấn hoặc con trỏ vàSử dụng mô tả 와이즈 토토
là cách để chuyển các 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ả 와이즈 토토 có tên bên dưới:tên
EXEC 와이즈 토토 SET mô tảtên
giá trịnum
trường
=:hostvar
;
Postgre와이즈 토토 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 các 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 와이즈 토토 bắt đầu khai báo; int id [5]; EXEC 와이즈 토토 END TUYÊN BỐ TUYÊN BỐ; EXEC 와이즈 토토 tìm nạp 5 từ mycursor vào bộ mô tả 와이즈 토토 MyDesc; EXEC 와이즈 토토 GET MÔ TẢ MYDESC Giá trị 1: id = data;
Khu vực mô tả 와이즈 토토DA là cấu trúc ngôn ngữ C cũng có thể được sử dụng để 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 와이즈 토토 bao gồm sqlda.h; sqlda_t *mysqlda; EXEC 와이즈 토토 tìm nạp 3 từ mycursor vào mô tả mysqlda;
Lưu ý rằng와이즈 토토
Từ khóa bị bỏ qua. Các đoạn văn về các trường hợp sử dụng củathành
vàSử dụng
Từ khóa trongPhần 36.7.1Cũng áp dụng ở đâ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ử dụng:
EXEC 와이즈 토토 Mô tả đã chuẩn bị_statement vào mysqlda;
Lưu lượng chung của một chương trình sử dụng 와이즈 토토DA là:
Chuẩn bị truy vấn và khai báo con trỏ cho nó.
khai báo 와이즈 토토DA cho các hàng kết quả.
khai báo 와이즈 토토DA cho các 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 와이즈 토토DA đầu vào.
Lấy hàng từ con trỏ và lưu trữ chúng vào đầu ra sqlda.
Đọc các giá trị từ đầu ra 와이즈 토토DA vào các 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 와이즈 토토DA đầu vào.
와이즈 토토DA sử dụng ba loại cấu trúc dữ liệu:와이즈 토토DA_T
, 와이즈 토토VAR_T
vàstruct 와이즈 토토name
.
22270_22456
Loại cấu trúc와이즈 토토DA_T
là loại của 와이즈 토토DA thực tế. Nó giữ một kỷ lục. Và hai hoặc nhiều hơn와이즈 토토DA_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 các 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ỗi와이즈 토토DA_T
Node.
Định nghĩa của와이즈 토토DA_T
IS:
struct sqlda_struct char sqldaid [8]; sqldabc dài; 와이즈 토토N ngắn; 와이즈 토토D ngắn; struct sqlda_struct *desc_next; struct sqlvar_struct sqlvar [1]; ; typedef struct sqlda_struct sqlda_t;
Ý nghĩa của các trường là:
와이즈 토토DAID
Nó chứa chuỗi chữ"와이즈 토토DA"
.
와이즈 토토DABC
Nó chứa kích thước của không gian được phân bổ trong byte.
와이즈 토토N
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ử dụngSử dụng
Từ khóa. Trong trường hợp nó được sử dụng làm đầu ra củaChọn
, thực thi
hoặcFetch
Câu lệnh, giá trị của nó giống như와이즈 토토D
câu lệnh
와이즈 토토D
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 와이즈 토토DA đượ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.
와이즈 토토VAR
Đây là mảng của các cột trong tập kết quả.
Loại cấu trúc와이즈 토토VAR_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 와이즈 토토TYPE ngắn; 와이즈 토토LEN ngắn; char *와이즈 토토data; ngắn *sqlind; struct 와이즈 토토name 와이즈 토토name; ; typedef struct sqlvar_struct sqlvar_t;
Ý nghĩa của các trường là:
와이즈 토토TYPE
chứa định danh loại của trường. Đối với các giá trị, xemenum ecpgttype
inecpgtype.h
.
와이즈 토토len
Chứa độ dài nhị phân của trường. ví dụ: 4 byte choECPGT_INT
.
와이즈 토토data
chỉ vào dữ liệu. Định dạng của dữ liệu được mô tả trongPhần 36.4.4.
와이즈 토토IND
chỉ vào chỉ báo null. 0 có nghĩa là không null, -1 có nghĩa là null.
와이즈 토토name
Tên của trường.
Astruct 와이즈 토토name
Cấu trúc giữ tên cột. Nó được sử dụng như một thành viên của와이즈 토토VAR_T
Cấu trúc. Định nghĩa của cấu trúc là:
#define có tênatalen 64 Cấu trúc 와이즈 토토name chiều dài ngắn; Dữ liệu char [Được đặt tên]; ;
Ý nghĩa của các trường là:
LEGN
Chứa độ dài của tên trường.
Data
chứa tên trường thực tế.
Các bước chung để truy xuất kết quả truy vấn được đặt thông qua 와이즈 토토DA là:
khai báo와이즈 토토DA_T
Cấu trúc để nhận tập kết quả.
thực thiFetch
/thực thi
/mô tả
lệnh xử lý truy vấn chỉ định 와이즈 토토DA được khai báo.
Kiểm tra số lượng bản ghi trong kết quả được đặt bằng cách xem와이즈 토토N
, một thành viên của와이즈 토토DA_T
Cấu trúc.
Nhận các giá trị của mỗi cột từ와이즈 토토VAR [0]
, 와이즈 토토VAR [1]
, v.v., các thành viên của와이즈 토토DA_T
Cấu trúc.
Chuyển đến hàng tiếp theo (와이즈 토토DA_T
Cấu trúc) bằng cách làm theoDESC_NEXT
Con trỏ, một thành viên của와이즈 토토DA_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 A와이즈 토토DA_T
Cấu trúc để nhận tập kết quả.
와이즈 토토DA_T *와이즈 토토DA1;
Tiếp theo, chỉ định 와이즈 토토DA trong một lệnh. Đây là mộtFetch
Ví dụ về lệnh.
30643_30700
Chạy vòng lặp theo danh sách được liên kết để truy xuất các hàng.
sqlda_t *cur_sqlda; for (cur_sqlda = sqlda1; cur_sqlda! = null; cur_sqlda = cur_sqlda- desc_next) ...
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 (와이즈 토토VAR_T
Cấu trúc) của hàng.
for (i = 0; i <cur_sqlda- sqld; i ++) sqlvar_t v = cur_sqlda- sqlvar [i]; char *와이즈 토토data = v.와이즈 토토data; Sqllen ngắn = v.와이즈 토토len; ...
Để nhận giá trị cột, hãy kiểm tra와이즈 토토TYPE
Giá trị, một thành viên của와이즈 토토VAR_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ừ와이즈 토토VAR
trường thành biến máy chủ.
char var_buf [1024]; chuyển đổi (V.와이즈 토토TYPE) CASE ECPGT_CHAR: memset (& var_buf, 0, sizeof (var_buf)); memcpy (& var_buf, 와이즈 토토data, (sizeof (var_buf) <= 와이즈 토토len? sizeof (var_buf) - 1: 와이즈 토토len)); phá vỡ; trường hợp ecpgt_int: / * số nguyên * / / memcpy (& intval, 와이즈 토토data, 와이즈 토토len); snprintf (var_buf, sizeof (var_buf), "%d", intval); phá vỡ; ...
Các bước chung để sử dụng 와이즈 토토DA để chuyển các tham số đầu vào cho truy vấn đã chuẩn bị là:
Tạo truy vấn đã chuẩn bị (câu lệnh đã chuẩn bị)
Khai báo cấu trúc 와이즈 토토DA_T dưới dạng đầu vào sqlda.
Phân bổ khu vực bộ nhớ (dưới dạng cấu trúc 와이즈 토토DA_T) cho 와이즈 토토DA đầu vào.
Đặt (sao chép) Các giá trị đầu vào trong bộ nhớ được phân bổ.
Mở con trỏ với việc chỉ định 와이즈 토토DA đầu vào.
Đây là một ví dụ.
Đầu tiên, tạo một câu lệnh đã chuẩn bị.
EXEC 와이즈 토토 bắt đầu phần khai báo; Truy vấn char [1024] = "Chọn d.oid, * từ pg_database D, pg_stat_database s trong đó d.oid = s.datid và (d.datname =? hoặc d.oid =?)"; EXEC 와이즈 토토 END TUYÊN BỐ TUYÊN BỐ; EXEC 와이즈 토토 Chuẩn bị STMT1 từ: Truy vấn;
Tiếp theo, phân bổ bộ nhớ cho 와이즈 토토DA và đặt số lượng tham số đầu vào trong와이즈 토토N
, một biến thành viên của와이즈 토토DA_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 dụng 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). Ví dụ được hiển thị ở đây phân bổ không gian bộ nhớ cho hai tham số đầu vào.
와이즈 토토DA_T *와이즈 토토DA2; sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (sqlvar_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (sqlvar_t)); sqlda2- sqln = 2; / * Số lượng biến đầu vào */
Sau khi phân bổ bộ nhớ, lưu trữ các giá trị tham số vào와이즈 토토VAR []
Mảng. ."Postgres"
, có loại chuỗi và1
, có loại số nguyên.
와이즈 토토DA2- 와이즈 토토VAR [0] .와이즈 토토TYPE = ECPGT_CHAR; sqlda2- sqlvar [0] .와이즈 토토data = "postgres"; sqlda2- sqlvar [0] .와이즈 토토len = 8; int intval = 1; sqlda2- sqlvar [1] .sqltype = ecpgt_int; sqlda2- sqlvar [1] .와이즈 토토data = (char *) & intval; sqlda2- sqlvar [1] .와이즈 토토len = sizeof (intval);
Bằng cách mở con trỏ và chỉ định 와이즈 토토DA được thiết lập trước, các tham số đầu vào được chuyển đến câu lệnh đã chuẩn bị.
EXEC 와이즈 토토 Mở Cur1 bằng cách sử dụng mô tả 와이즈 토토DA2;
Cuối cùng, sau khi sử dụng 와이즈 토토DA đầ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ư 와이즈 토토DA được sử dụng để nhận kết quả truy vấn.
miễn phí (와이즈 토토da2);
Đây là một chương trình ví dụ, mô tả cách tìm nạp các số liệu thống kê truy cập của cơ sở dữ liệu, được chỉ định bởi các tham số đầu vào, từ các danh mục hệ thống.
Ứng dụng 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 와이즈 토토DA cho đầu vào và 와이즈 토토DA cho đầu ra.
EXEC 와이즈 토토 bao gồm sqlda.h; sqlda_t *sqlda1; / * một mô tả đầu ra */ sqlda_t *sqlda2; / * một mô tả đầu vào */
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 Main (Void) EXEC 와이즈 토토 bắt đầu phần khai báo; Truy vấn char [1024] = "Chọn d.oid,* từ pg_database D, pg_stat_database s trong đó d.oid = s.datid và (d.datname =? hoặc d.oid =?)"; EXEC 와이즈 토토 END TUYÊN BỐ TUYÊN BỐ; EXEC 와이즈 토토 kết nối với TestDB với tư cách là người dùng người dùng CON1; Exec sql chọn pg_catalog.set_config ('search_path', '', false); Exec sql cam kết; EXEC 와이즈 토토 Chuẩn bị STMT1 từ: Truy vấn; EXEC 와이즈 토토 Tuyên bố con trỏ Cur1 cho STMT1;
Tiếp theo, đặt một số giá trị vào 와이즈 토토DA đầu vào cho các tham số đầu vào. Phân bổ bộ nhớ cho 와이즈 토토DA đầu vào và đặt số lượng tham số đầu vào thành와이즈 토토N
. Lưu trữ loại, giá trị và độ dài giá trị thành와이즈 토토TYPE
, 와이즈 토토data
và와이즈 토토len
trong와이즈 토토VAR
Cấu trúc.
/* Tạo cấu trúc 와이즈 토토DA cho các tham số đầu vào. */ sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (sqlvar_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (sqlvar_t)); sqlda2- sqln = 2; / * Số lượng biến đầu vào */ sqlda2- sqlvar [0] .sqltype = ecpgt_char; sqlda2- sqlvar [0] .와이즈 토토data = "postgres"; sqlda2- sqlvar [0] .와이즈 토토len = 8; intval = 1; sqlda2- sqlvar [1] .sqltype = ecpgt_int; sqlda2- sqlvar [1] .와이즈 토토data = (char *) & intval; sqlda2- sqlvar [1] .와이즈 토토len = sizeof (intval);
Sau khi thiết lập 와이즈 토토DA đầu vào, hãy mở một con trỏ bằng 와이즈 토토DA đầu vào.
/* Mở một con trỏ với các tham số đầu vào. */ EXEC 와이즈 토토 MỞ CUR1 bằng cách sử dụng Descriptor 와이즈 토토DA2;
Tìm nạp các hàng vào đầu ra 와이즈 토토DA 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ả các hàng trong tập kết quả.)
WHER (1) sqlda_t *cur_sqlda; / * Gán mô tả cho con trỏ *// EXEC 와이즈 토토 tìm nạp tiếp theo từ Cur1 vào Descriptor 와이즈 토토DA1;
Tiếp theo, hãy truy xuất các bản ghi được tìm nạp từ 와이즈 토토DA, bằng cách làm theo danh sách được liên kết của와이즈 토토DA_T
Cấu trúc.
for (cur_sqlda = sqlda1; cur_sqlda! = null; cur_sqlda = cur_sqlda- desc_next) ...
Đọc từng cột trong bản ghi đầu tiên. Số lượng cột được lưu trữ trong와이즈 토토D
, Dữ liệu thực tế của cột đầu tiên được lưu trữ trong와이즈 토토VAR [0]
, Cả hai thành viên của와이즈 토토DA_T
Cấu trúc.
/* In mỗi cột trong một hàng. */ for (i = 0; i <sqlda1- sqld; i ++) sqlvar_t v = sqlda1- sqlvar [i]; char *와이즈 토토data = v.와이즈 토토data; Sqllen ngắn = v.와이즈 토토len; strncpy (name_buf, v.와이즈 토토name.data, v.와이즈 토토name.length); name_buf [v.와이즈 토토name.length] = '\ 0';
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 các biến máy chủ, nhìn vàoV.와이즈 토토TYPE
Đối với loại cột.
Switch (v.sqltype) int intval; gấp đôi gấp đôi; không dấu dài dài int longlongval; CASE ECPGT_CHAR: memset (& var_buf, 0, sizeof (var_buf)); memcpy (& var_buf, 와이즈 토토data, (sizeof (var_buf) <= 와이즈 토토len? sizeof (var_buf) -1: 와이즈 토토len)); phá vỡ; trường hợp ecpgt_int: / * số nguyên * / / memcpy (& intval, 와이즈 토토data, 와이즈 토토len); snprintf (var_buf, sizeof (var_buf), "%d", intval); phá vỡ; ... mặc định: ... printf (" %s = %s (loại: %d) \ n", name_buf, var_buf, v.sqltype);
Đóng con trỏ sau khi xử lý tất cả các bản ghi và ngắt kết nối khỏi cơ sở dữ liệu.
EXEC 와이즈 토토 Đóng Cur1; Exec sql cam kết; Exec sql ngắt kết nối tất cả;
Toàn bộ chương trình được hiển thị trongVí dụ 36.1.
Ví dụ 36.1. Ví dụ chương trình 와이즈 토토DA
#include <stdlib.h #include <chuỗi.h #include <stdlib.h #include <stdio.h #include <unistd.h EXEC 와이즈 토토 bao gồm sqlda.h; sqlda_t *sqlda1; / * mô tả cho đầu ra */ sqlda_t *sqlda2; / * mô tả cho đầu vào */ EXEC 와이즈 토토 Bất cứ khi nào không tìm thấy bị phá vỡ; EXEC 와이즈 토토 Bất cứ khi nào sqlerror dừng lại; int Main (Void) EXEC 와이즈 토토 bắt đầu phần khai báo; Truy vấn char [1024] = "Chọn d.oid,* từ pg_database D, pg_stat_database s trong đó d.oid = s.datid và (d.datname =? hoặc d.oid =?)"; int intval; không dấu dài dài int longlongval; EXEC 와이즈 토토 END TUYÊN BỐ TUYÊN BỐ; EXEC 와이즈 토토 Kết nối với UptimedB với tư cách là người dùng CON1 thời gian hoạt động; Exec sql chọn pg_catalog.set_config ('search_path', '', false); Exec sql cam kết; EXEC 와이즈 토토 Chuẩn bị STMT1 từ: Truy vấn; EXEC 와이즈 토토 tuyên bố con trỏ Cur1 cho STMT1; / * Tạo cấu trúc 와이즈 토토DA cho tham số đầu vào */ sqlda2 = (sqlda_t *) malloc (sizeof (sqlda_t) + sizeof (sqlvar_t)); memset (sqlda2, 0, sizeof (sqlda_t) + sizeof (sqlvar_t)); sqlda2- sqln = 2; / * Một số biến đầu vào */ sqlda2- sqlvar [0] .sqltype = ecpgt_char; sqlda2- sqlvar [0] .와이즈 토토data = "postgres"; sqlda2- sqlvar [0] .와이즈 토토len = 8; intval = 1; sqlda2- sqlvar [1] .sqltype = ecpgt_int; sqlda2- sqlvar [1] .와이즈 토토data = (char *) & intval; sqlda2- sqlvar [1] .와이즈 토토len = sizeof (intval); /* Mở một con trỏ với các tham số đầu vào. */ EXEC 와이즈 토토 MỞ CUR1 bằng cách sử dụng mô tả 와이즈 토토DA2; while (1) sqlda_t *cur_sqlda; / * Gán mô tả cho con trỏ *// EXEC 와이즈 토토 tìm nạp tiếp theo từ Cur1 vào mô tả 와이즈 토토DA1; for (cur_sqlda = sqlda1; cur_sqlda! = null; cur_sqlda = cur_sqlda- desc_next) int i; char name_buf [1024]; char var_buf [1024]; /* In mọi cột trong một hàng. */ for (i = 0; i <cur_sqlda- sqld; i ++) sqlvar_t v = cur_sqlda- sqlvar [i]; char *와이즈 토토data = v.와이즈 토토data; Sqllen ngắn = v.와이즈 토토len; strncpy (name_buf, v.와이즈 토토name.data, v.와이즈 토토name.length); name_buf [v.와이즈 토토name.length] = '\ 0'; chuyển đổi (V.와이즈 토토TYPE) CASE ECPGT_CHAR: memset (& var_buf, 0, sizeof (var_buf)); memcpy (& var_buf, 와이즈 토토data, (sizeof (var_buf) <= 와이즈 토토len? sizeof (var_buf) -1: 와이즈 토토len)); phá vỡ; trường hợp ecpgt_int: / * số nguyên * / / memcpy (& intval, 와이즈 토토data, 와이즈 토토len); snprintf (var_buf, sizeof (var_buf), "%d", intval); phá vỡ; Case ECPGT_LONG_LONG: / * BIGINT * / memcpy (& longlongval, 와이즈 토토data, 와이즈 토토len); snprintf (var_buf, sizeof (var_buf), "%lld", longlongval); phá vỡ; mặc định: int i; memset (var_buf, 0, sizeof (var_buf)); for (i = 0; i <와이즈 토토len; i ++) char tmpbuf [16]; snprintf (tmpbuf, sizeof (tmpbuf), "%02x", (char không dấu) 와이즈 토토data [i]); strncat (var_buf, tmpbuf, sizeof (var_buf)); phá vỡ; printf (" %s = %s (loại: %d) \ n", name_buf, var_buf, v.sqltype); printf ("\ n"); EXEC 와이즈 토토 Đóng Cur1; Exec sql cam kết; EXEC 와이즈 토토 Ngắt kết nối tất cả; trả lại 0;
Đầ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) datname = template1 (loại: 1) datdba = 10 (loại: 1) Mã hóa = 0 (loại: 5) datistemplate = t (loại: 1) datallowconn = t (loại: 1) datconnlimit = -1 (loại: 5) datfrozenxid = 379 (loại: 1) Dattablespace = 1663 (loại: 1) datconfig = (loại: 1) dataCl = = c/uptime, uptime = ctc/uptime (loại: 1) datid = 1 (loại: 1) datname = template1 (loại: 1) numbackends = 0 (loại: 5) xact_commit = 113606 (loại: 9) xact_rollback = 0 (loại: 9) blks_read = 130 (loại: 9) BLKS_HIT = 7341714 (loại: 9) TUP_Returned = 38262679 (loại: 9) TUP_Fetched = 1836281 (loại: 9) TUP_INSERTED = 0 (loại: 9) TUP_UPDATED = 0 (loại: 9) TUP_Deleted = 0 (loại: 9) oid = 11511 (loại: 1) datname = postgres (loại: 1) datdba = 10 (loại: 1) Mã hóa = 0 (loại: 5) datistemplate = f (loại: 1) datallowconn = t (loại: 1) datconnlimit = -1 (loại: 5) datfrozenxid = 379 (loại: 1) Dattablespace = 1663 (loại: 1) datconfig = (loại: 1) dataCl = (loại: 1) datid = 11511 (loại: 1) datname = postgres (loại: 1) numbackends = 0 (loại: 5) xact_commit = 221069 (loại: 9) xact_rollback = 18 (loại: 9) blks_read = 1176 (loại: 9) BLKS_HIT = 13943750 (loại: 9) TUP_Returned = 77410091 (loại: 9) TUP_Fetched = 3253694 (loại: 9) TUP_INSERTED = 0 (loại: 9) TUP_UPDATED = 0 (loại: 9) TUP_Deleted = 0 (loại: 9)
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.