inPhần 36.311482_11952cách đọc kèo bóng đá chủ. Trong một chương trình SQL nhúng, chúng tôi coi cách đọc kèo bóng đá câu lệnh SQL làKháchTrong mã chương trình C làNgôn ngữ máy chủ. Do đó, cách đọc kèo bóng đá biến của chương trình C được gọi làcách đọc kèo bóng đá chủ.
12272_12399Phần 36.7.
Truyền dữ liệu giữa chương trình C và cách đọc kèo bóng đá câu lệnh SQL đặc biệt đơn giản trong SQL nhúng. Thay vì để chương trình dán dữ liệu vào câu lệnh, đòi hỏi cách đọc kèo bóng đá biến chứng khác nhau, chẳng hạn như trích dẫn đúng giá trị, bạn chỉ có thể viết tên của biến C vào câu lệnh SQL, được đặt trước bởi một dấu hai chấm. Ví dụ:
EXEC SQL chèn vào cách đọc kèo bóng đá giá trị một số (: v1, 'foo',: v2);
Câu lệnh này đề cập đến hai biến C có tênV1
vàV2
Và cũng sử dụng một chuỗi cách đọc kèo bóng đá thông thường theo nghĩa đen, để minh họa rằng bạn không bị hạn chế sử dụng một loại dữ liệu hoặc loại khác.
13415_13537
Để chuyển dữ liệu từ chương trình sang cơ sở dữ liệu, ví dụ như cách đọc kèo bóng đá tham số trong truy vấn hoặc chuyển dữ liệu từ cơ sở dữ liệu trở lại chương trình, cách đọc kèo bóng đá biến C dự định chứa dữ liệu này cần được khai báo trong cách đọc kèo bóng đá phần được đánh dấu đặc biệt, do đó
Phần này bắt đầu bằng:
EXEC cách đọc kèo bóng đá BẮT ĐẦU TUYỆT VỜI
và kết thúc bằng:
EXEC cách đọc kèo bóng đá End Declare phần
Giữa cách đọc kèo bóng đá dòng đó, phải có cách đọc kèo bóng đá khai báo biến C bình thường, chẳng hạn như:
int x = 4; char foo [16], thanh [16];
Như bạn có thể thấy, bạn có thể tùy ý gán một giá trị ban đầu cho biến. Phạm vi của biến được xác định bởi vị trí của phần khai báo trong chương trình. Bạn cũng có thể khai báo cách đọc kèo bóng đá biến với cú pháp sau đây để tạo ra phần khai báo:
exec cách đọc kèo bóng đá int i = 4;
Bạn có thể có bao nhiêu phần khai báo trong một chương trình tùy thích.
cách đọc kèo bóng đá khai báo cũng được lặp lại với tệp đầu ra dưới dạng cách đọc kèo bóng đá biến C bình thường, do đó không cần phải khai báo chúng một lần nữa. cách đọc kèo bóng đá biến không được sử dụng trong cách đọc kèo bóng đá lệnh SQL có thể được khai báo bình thường bên ngoài cách đọc kèo bóng đá phần đặc biệt này.
Định nghĩa về cấu trúc hoặc liên kết cũng phải được liệt kê bên trong Akhai báo
Phần. Nếu không thì bộ tiền xử lý không thể xử lý cách đọc kèo bóng đá loại này vì nó không biết định nghĩa.
Bây giờ bạn sẽ có thể chuyển dữ liệu được tạo bởi chương trình của bạn vào lệnh SQL. Nhưng làm thế nào để bạn lấy lại kết quả của một truy vấn? Với mục đích đó, SQL nhúng cung cấp cách đọc kèo bóng đá biến thể đặc biệt của cách đọc kèo bóng đá lệnh thông thườngChọn
vàFetch
. cách đọc kèo bóng đá lệnh này có một đặc biệtthành
mệnh đề chỉ định cách đọc kèo bóng đá biến máy chủ nào mà cách đọc kèo bóng đá giá trị được truy xuất sẽ được lưu trữ trong.Chọn
được sử dụng cho một truy vấn chỉ trả về hàng đơn vàFetch
được sử dụng cho một truy vấn trả về nhiều hàng, sử dụng con trỏ.
Đây là một ví dụ:
/* * Giả sử bảng này: * Tạo Bảng Test1 (A Int, B Varchar (50)); */ EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; int v1; Varchar v2; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; ... EXEC cách đọc kèo bóng đá Chọn a, b vào: v1,: v2 từ kiểm tra;
SOthành
mệnh đề xuất hiện giữa danh sách chọn vàtừ
mệnh đề. Số lượng phần tử trong danh sách chọn và danh sách sauthành
(còn được gọi là danh sách đích) phải bằng nhau.
Đây là một ví dụ sử dụng lệnhFetch
:
EXEC cách đọc kèo bóng đá BẮT ĐẦU phần khai báo; int v1; Varchar v2; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; ... EXEC cách đọc kèo bóng đá khai báo con trỏ foo cho chọn a, b từ thử nghiệm; ... LÀM ... EXEC cách đọc kèo bóng đá tìm nạp tiếp theo từ foo thành: v1,: v2; ... trong khi (...);
ở đâythành
mệnh đề xuất hiện sau tất cả cách đọc kèo bóng đá mệnh đề bình thường.
Khi cách đọc kèo bóng đá ứng dụng ECPG trao đổi giá trị giữa máy chủ PostgreSQL và ứng dụng C, chẳng hạn như khi truy xuất kết quả truy vấn từ máy chủ hoặc thực thi cách đọc kèo bóng đá câu lệnh SQL với cách đọc kèo bóng đá tham số đầu vào, cách đọc kèo bóng đá giá trị cần được chuyển đổi giữa cách đọc kèo bóng đá loại dữ liệu PostGreSQL và cách đọc kèo bóng đá loại thay đổi ngôn ngữ (C). Một trong những điểm chính của ECPG là nó tự động chăm sóc điều này trong hầu hết cách đọc kèo bóng đá trường hợp.
Về mặt này, có hai loại dữ liệu: một số loại dữ liệu PostgreSQL đơn giản, chẳng hạn nhưSố nguyên
vàText
, có thể được đọc và viết trực tiếp bởi ứng dụng. cách đọc kèo bóng đá loại dữ liệu PostgreSQL khác, chẳng hạn nhưDấu thời gian
vàSố
Chỉ có thể được truy cập thông qua cách đọc kèo bóng đá chức năng thư viện đặc biệt; nhìn thấyPhần 36.4.4.2.
Bảng 36.1hiển thị cách đọc kèo bóng đá loại dữ liệu PostgreSQL tương ứng với cách đọc kèo bóng đá loại dữ liệu C. Khi bạn muốn gửi hoặc nhận giá trị của một loại dữ liệu PostgreSQL đã cho, bạn nên khai báo biến C của loại dữ liệu C tương ứng trong phần khai báo.
Bảng 36.1. Ánh xạ giữa cách đọc kèo bóng đá loại dữ liệu PostgreSQL và cách đọc kèo bóng đá loại biến C
Loại dữ liệu PostgreSQL | Loại cách đọc kèo bóng đá chủ |
---|---|
SmallInt |
ngắn |
Số nguyên |
int |
Bigint |
dài int |
thập phân |
thập phân [A] |
Số |
Số [A] |
Real |
float |
Double Precision |
Double |
SmallSerial |
ngắn |
sê -ri |
int |
BigSerial |
dài int |
oid |
unsign int |
ký tự ( , Varchar ( , Text |
char [ , Varchar [ |
tên |
char [tên được đặt tên] |
dấu thời gian |
dấu thời gian [A] |
Khoảng |
Khoảng [A] |
ngày |
ngày [A] |
Boolean |
bool [B] |
bytea |
char * , bytea [ |
[A]Loại này chỉ có thể được truy cập thông qua cách đọc kèo bóng đá chức năng thư viện đặc biệt; nhìn thấyPhần 36.4.4.2. [B]được khai báo trong |
Để xử lý cách đọc kèo bóng đá loại dữ liệu chuỗi ký tự SQL, chẳng hạn nhưVarchar
vàText
, có hai cách có thể để khai báo cách đọc kèo bóng đá biến máy chủ.
Một cách đọc kèo bóng đá đang sử dụngchar []
, một mảngchar
, là cách đọc kèo bóng đá phổ biến nhất để xử lý dữ liệu ký tự trong C.
EXEC cách đọc kèo bóng đá bắt đầu khai báo; char str [50]; Exec cách đọc kèo bóng đá end decare phần;
Lưu ý rằng bạn phải tự mình chăm sóc độ dài. Nếu bạn sử dụng cách đọc kèo bóng đá chủ này làm biến mục tiêu của truy vấn trả về chuỗi có hơn 49 ký tự, sẽ xảy ra tràn bộ đệm.
cách đọc kèo bóng đá khác là sử dụngVarchar
Loại, là loại đặc biệt được cung cấp bởi ECPG. Định nghĩa trên một mảng loạiVarchar
được chuyển đổi thành một cái tênstruct
Đối với mỗi biến. Một tuyên bố như:
Varchar var [180];
được chuyển đổi thành:
struct varchar_var int len; Char Arr [180]; var;
Thành viênmảng
Hosts chuỗi bao gồm một byte kết thúc bằng không. Do đó, để lưu trữ một chuỗi trong mộtVarchar
cách đọc kèo bóng đá chủ, cách đọc kèo bóng đá chủ phải được khai báo với độ dài bao gồm cả bộ hủy byte bằng không. Thành viênlen
Giữ độ dài của chuỗi được lưu trữ trongmảng
Không có byte chấm dứt bằng không. Khi một cách đọc kèo bóng đá chủ được sử dụng làm đầu vào cho truy vấn, nếustrlen (mảng)
vàlen
là khác nhau, cái ngắn hơn được sử dụng.
Varchar
có thể được viết bằng chữ hoa hoặc chữ thường, nhưng không phải trong trường hợp hỗn hợp.
Char
vàVarchar
Biến máy chủ cũng có thể giữ cách đọc kèo bóng đá giá trị của cách đọc kèo bóng đá loại SQL khác, sẽ được lưu trữ trong cách đọc kèo bóng đá biểu mẫu chuỗi của chúng.
ECPG chứa một số loại đặc biệt giúp bạn tương tác dễ dàng với một số loại dữ liệu đặc biệt từ máy chủ PostgreSQL. Cụ thể, nó đã triển khai hỗ trợ choSố
, thập phân
, ngày
, Dấu thời gian
vàKhoảng
Loại. cách đọc kèo bóng đá loại dữ liệu này không thể được ánh xạ một cách hữu ích đến cách đọc kèo bóng đá loại biến chủ nguyên thủy (chẳng hạn nhưint
, dài int
hoặcchar []
), vì chúng có cấu trúc bên trong phức tạp. cách đọc kèo bóng đá ứng dụng liên quan đến cách đọc kèo bóng đá loại này bằng cách khai báo cách đọc kèo bóng đá biến máy chủ theo cách đọc kèo bóng đá loại đặc biệt và truy cập chúng bằng cách sử dụng cách đọc kèo bóng đá chức năng trong thư viện PGTYPES. Thư viện PGTYPES, được mô tả chi tiết trongPhần 36.6Chứa cách đọc kèo bóng đá chức năng cơ bản để đối phó với cách đọc kèo bóng đá loại đó, do đó bạn không cần phải gửi truy vấn đến máy chủ SQL chỉ để thêm một khoảng thời gian vào dấu thời gian chẳng hạn.
cách đọc kèo bóng đá tiểu mục sau mô tả cách đọc kèo bóng đá loại dữ liệu đặc biệt này. Để biết thêm chi tiết về cách đọc kèo bóng đá chức năng thư viện PGTYPES, xemPhần 36.6.
Đây là một mẫu để xử lýDấu thời gian
Biến trong ứng dụng máy chủ ECPG.
Đầu tiên, chương trình phải bao gồm tệp tiêu đề choDấu thời gian
28347_28355
#include <pgtypes_timestamp.h
Tiếp theo, khai báo cách đọc kèo bóng đá chủ dưới dạng loạidấu thời gian
Trong phần khai báo:
EXEC cách đọc kèo bóng đá BẮT ĐẦU phần khai báo; Dấu thời gian TS; Exec cách đọc kèo bóng đá end decare phần;
Và sau khi đọc một giá trị vào biến máy chủ, hãy xử lý nó bằng cách đọc kèo bóng đá hàm thư viện PGTyPes. Trong ví dụ sau,dấu thời gian
Giá trị được chuyển đổi thành mẫu văn bản (ASCII) vớipgtypestimestamp_to_asc ()
chức năng:
EXEC cách đọc kèo bóng đá CHỌN NGAY BÂY GIỜ () :: Dấu thời gian vào: TS; printf ("ts = %s \ n", pgtypestimestamp_to_asc (ts));
Ví dụ này sẽ hiển thị một số kết quả như sau:
TS = 2010-06-27 18: 03: 56.949343
Ngoài ra, loại ngày có thể được xử lý theo cùng một cách đọc kèo bóng đá. Chương trình phải bao gồmpgtypes_date.h
, khai báo cách đọc kèo bóng đá chủ là loại ngày và chuyển đổi giá trị ngày thành biểu mẫu văn bản bằng cách sử dụngpgtypesdate_to_asc ()
Hàm. Để biết thêm chi tiết về cách đọc kèo bóng đá chức năng thư viện PGTYPES, xemPhần 36.6.
Xử lýKhoảng
Loại cũng tương tự nhưDấu thời gian
vàngày
Loại. Tuy nhiên, yêu cầu phân bổ bộ nhớ cho mộtKhoảng
Loại giá trị rõ ràng. Nói cách đọc kèo bóng đá khác, không gian bộ nhớ cho biến phải được phân bổ trong bộ nhớ heap, không phải trong bộ nhớ ngăn xếp.
Đây là một chương trình ví dụ:
30408_30952
Xử lýSố
vàthập phân
cách đọc kèo bóng đá loại tương tự nhưKhoảng
Loại: Nó yêu cầu xác định một con trỏ, phân bổ một số không gian bộ nhớ trên đống và truy cập biến bằng cách đọc kèo bóng đá hàm thư viện PGTYPES. Để biết thêm chi tiết về cách đọc kèo bóng đá chức năng thư viện PGTYPES, xemtỷ lệ kèo bóng đá trực tuyến.
Không có chức năng nào được cung cấp cụ thể chothập phân
Loại. Một ứng dụng phải chuyển đổi nó thànhSố
Biến sử dụng chức năng thư viện PGTYPES để thực hiện xử lý thêm.
Đây là một ví dụ về xử lý chương trìnhSố
vàthập phân
Loại biến.
#include <stdio.h #include <stdlib.h #include <pgtypes_numeric.h EXEC cách đọc kèo bóng đá Bất cứ khi nào sqlerror dừng lại; int Main (Void) EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; số *num; số *num2; thập phân *dec; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; EXEC cách đọc kèo bóng đá Kết nối với TestDB; Exec cách đọc kèo bóng đá chọn pg_catalog.set_config ('search_path', '', false); Exec cách đọc kèo bóng đá cam kết; num = pgtypesNumeric_new (); dec = pgtypesdecimal_new (); Exec cách đọc kèo bóng đá Chọn 12.345 :: Numeric (4,2), 23.456 :: Decimal (4,2) vào: Num,: dec; printf ("numeric = %s \ n", pgtypesnumeric_to_asc (num, 0)); printf ("numeric = %s \ n", pgtypesnumeric_to_asc (num, 1)); printf ("numeric = %s \ n", pgtypesnumeric_to_asc (num, 2)); /* Chuyển đổi thập phân sang số để hiển thị giá trị thập phân. */ num2 = pgtypesnumeric_new (); Pgtypesnumeric_from_decimal (dec, num2); printf ("decimal = %s \ n", pgtypesnumeric_to_asc (num2, 0)); printf ("decimal = %s \ n", pgtypesnumeric_to_asc (num2, 1)); printf ("decimal = %s \ n", pgtypesnumeric_to_asc (num2, 2)); Pgtypesnumeric_free (num2); Pgtypesdecimal_free (dec); Pgtypesnumeric_free (num); Exec cách đọc kèo bóng đá cam kết; EXEC cách đọc kèo bóng đá Ngắt kết nối tất cả; trả lại 0;
Xử lýbytea
Loại tương tự nhưVarchar
. Định nghĩa trên một mảng loạibytea
được chuyển đổi thành một cấu trúc được đặt tên cho mọi biến. Một tuyên bố như:
bytea var [180];
được chuyển đổi thành:
struct bytea_var int len; Char Arr [180]; var;
Thành viênmảng
Dữ liệu định dạng nhị phân. Nó cũng có thể xử lý'\ 0'
Là một phần của dữ liệu, không giống nhưVarchar
. Dữ liệu được chuyển đổi từ/sang định dạng HEX và được gửi/nhận bởi ECPGLIB.
bytea
Biến chỉ có thể được sử dụng khibytea_outputđược đặt thànhHex
.
Là một cách đọc kèo bóng đá chủ, bạn cũng có thể sử dụng mảng, typedefs, structs và con trỏ.
Có hai trường hợp sử dụng cho cách đọc kèo bóng đá mảng làm biến máy chủ. Đầu tiên là một cách để lưu trữ một số chuỗi văn bản trongchar []
hoặcVarchar []
, như được giải thích trong35456_35479. Trường hợp sử dụng thứ hai là lấy nhiều hàng từ kết quả truy vấn mà không cần sử dụng con trỏ. Không có một mảng, để xử lý kết quả truy vấn bao gồm nhiều hàng, cần phải sử dụng con trỏ vàFetch
Lệnh. Nhưng với cách đọc kèo bóng đá biến máy chủ mảng, có thể nhận được nhiều hàng cùng một lúc. Độ dài của mảng phải được xác định để có thể chứa tất cả cách đọc kèo bóng đá hàng, nếu không thì một bộ đệm có thể xảy ra.
Ví dụ sau quétpg_database
Bảng hệ thống và hiển thị tất cả cách đọc kèo bóng đá OID và tên của cơ sở dữ liệu có sẵn:
36121_36741
Ví dụ này hiển thị kết quả sau. (cách đọc kèo bóng đá giá trị chính xác phụ thuộc vào hoàn cảnh cục bộ.)
oid = 1, dbname = template1 oid = 11510, dbname = template0 oid = 11511, dbname = postgres oid = 313780, dbname = testDb oid = 0, dbname = oid = 0, dbname = oid = 0, dbname =
Một cấu trúc có tên thành viên khớp với tên cột của kết quả truy vấn, có thể được sử dụng để truy xuất nhiều cột cùng một lúc. Cấu trúc cho phép xử lý nhiều giá trị cột trong một cách đọc kèo bóng đá chủ.
Ví dụ sau lấy OIDS, tên và kích thước của cơ sở dữ liệu có sẵn từpg_database
Bảng hệ thống và sử dụngpg_database_size ()
Hàm. Trong ví dụ này, một biến cấu trúcdbinfo_t
Với cách đọc kèo bóng đá thành viên có tên khớp với từng cột trongChọn
Kết quả được sử dụng để truy xuất một hàng kết quả mà không đặt nhiều cách đọc kèo bóng đá chủ vàoFetch
câu lệnh.
38067_38840
Ví dụ này hiển thị kết quả sau. (cách đọc kèo bóng đá giá trị chính xác phụ thuộc vào hoàn cảnh cục bộ.)
oid = 1, datName = template1, size = 4324580 oid = 11510, datName = template0, size = 4243460 oid = 11511, datName = postgres, size = 4324580 oid = 313780, datName = testDb, size = 8183012
cách đọc kèo bóng đá chủ cấu trúchấp thụNhiều cột như cấu trúc như cách đọc kèo bóng đá trường. cách đọc kèo bóng đá cột bổ sung có thể được gán cho cách đọc kèo bóng đá biến máy chủ khác. Ví dụ: chương trình trên cũng có thể được cơ cấu lại như thế này, vớisize
Biến bên ngoài cấu trúc:
EXEC SQL BẮT ĐẦU phần khai báo; Cấu trúc typedef int oid; DatName char [65]; dbinfo_t; dbinfo_t dbval; Kích thước int dài dài; EXEC SQL END TUYÊN BỐ TUYÊN BỐ; memset (& dbval, 0, sizeof (dbinfo_t)); EXEC SQL Tuyên bố con trỏ Cur1 cho chọn OID, DATNAME, PG_DATABASE_SIZE (OID) làm kích thước từ pg_database; EXEC SQL MỞ CUR1; / * Khi kết quả kết quả đã đạt được, thoát ra trong khi vòng lặp */ EXEC SQL Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) /* Tìm nạp nhiều cột vào một cấu trúc. */ EXEC SQL tìm nạp từ Cur1 thành: dbval,: kích thước; /* In cách đọc kèo bóng đá thành viên của cấu trúc. */ printf ("oid =%d, datName =%s, size =%lld \ n", dbval.oid, dbval.datname, size); EXEC SQL Đóng Cur1;
Sử dụngtypedef
Từ khóa để ánh xạ cách đọc kèo bóng đá loại mới thành cách đọc kèo bóng đá loại đã có.
EXEC cách đọc kèo bóng đá bắt đầu khai báo; typedef char mychartype [40]; typedef dài serial_t; Exec cách đọc kèo bóng đá end decare phần;
Lưu ý rằng bạn cũng có thể sử dụng:
EXEC cách đọc kèo bóng đá Loại serial_t dài;
Tuyên bố này không cần phải là một phần của phần khai báo.
Bạn có thể khai báo con trỏ cho cách đọc kèo bóng đá loại phổ biến nhất. Tuy nhiên, lưu ý rằng bạn không thể sử dụng con trỏ làm biến mục tiêu của cách đọc kèo bóng đá truy vấn mà không cần phân bổ tự động. Nhìn thấyPhần 36.7Để biết thêm thông tin về phân bổ tự động.
41627_41727
42007_42250
42469_42915
Nếu truy vấn truy cậpElementscủa một mảng một cách riêng biệt, sau đó điều này tránh việc sử dụng cách đọc kèo bóng đá mảng trong ECPG. Sau đó, một biến máy chủ với một loại có thể được ánh xạ tới loại phần tử nên được sử dụng. Ví dụ: nếu loại cột là mảngSố nguyên
, một cách đọc kèo bóng đá chủ thuộc loạiint
có thể được sử dụng. Ngoài ra nếu loại phần tử làVarchar
hoặcText
, một cách đọc kèo bóng đá chủ của loạichar []
hoặcVarchar []
có thể được sử dụng.
Đây là một ví dụ. Giả sử bảng sau:
Tạo bảng T3 ( ii số nguyên [] ); testDb = select * từ t3; ii ------------- 1,2,3,4,5
Chương trình ví dụ sau lấy phần tử thứ 4 của mảng và lưu trữ nó thành một cách đọc kèo bóng đá chủ của loạiint
:
EXEC cách đọc kèo bóng đá bắt đầu khai báo; int ii; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; EXEC cách đọc kèo bóng đá khai báo con trỏ Cur1 cho Chọn II [4] từ T3; EXEC cách đọc kèo bóng đá MỞ CUR1; EXEC cách đọc kèo bóng đá Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) EXEC cách đọc kèo bóng đá tìm nạp từ Cur1 vào: II; printf ("ii =%d \ n", ii); EXEC cách đọc kèo bóng đá Đóng Cur1;
Ví dụ này hiển thị kết quả sau:
ii = 4
44310_44516
44553_44864
Lưu ý lại rằng
EXEC cách đọc kèo bóng đá BẮT ĐẦU phần khai báo; int ii_a [8]; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; EXEC cách đọc kèo bóng đá tuyên bố con trỏ Cur1 cho Chọn II từ T3; EXEC cách đọc kèo bóng đá MỞ CUR1; EXEC cách đọc kèo bóng đá Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) /* SAI */ EXEC cách đọc kèo bóng đá tìm nạp từ Cur1 vào: ii_a; ...
45216_45336
Một cách giải quyết khác là lưu trữ cách đọc kèo bóng đá mảng trong biểu diễn chuỗi bên ngoài của chúng trong cách đọc kèo bóng đá biến máy chủ của loạichar []
hoặcVarchar []
. Để biết thêm chi tiết về đại diện này, xemPhần 8.15.245683_45849
cách đọc kèo bóng đá loại tổng hợp không được hỗ trợ trực tiếp trong ECPG, nhưng một cách giải quyết dễ dàng là có thể. cách đọc kèo bóng đá cách giải quyết có sẵn tương tự như cách đọc kèo bóng đá cách được mô tả cho cách đọc kèo bóng đá mảng ở trên: hoặc truy cập mỗi thuộc tính riêng biệt hoặc sử dụng biểu diễn chuỗi bên ngoài.
Đối với cách đọc kèo bóng đá ví dụ sau, giả sử loại và bảng sau:
46453_46598
Giải pháp rõ ràng nhất là truy cập riêng từng thuộc tính. Chương trình sau lấy dữ liệu từ bảng ví dụ bằng cách đọc kèo bóng đá chọn từng thuộc tính của loạicomp_t
riêng biệt:
EXEC SQL bắt đầu phần khai báo; int intval; Varchar TextVal [33]; EXEC SQL END TUYÊN BỐ TUYÊN BỐ; /* Đặt từng phần tử của cột loại tổng hợp vào danh sách chọn. */ EXEC SQL Tuyên bố con trỏ Cur1 cho Chọn (CompVal) .IntVal, (CompVal) .TextVal từ T4; EXEC SQL MỞ CUR1; EXEC SQL Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) /* Tìm nạp từng phần tử của cột loại tổng hợp thành cách đọc kèo bóng đá biến máy chủ. */ EXEC SQL tìm nạp từ Cur1 thành: intval,: TextVal; printf ("intval =%d, textVal =%s \ n", intval, textval.arr); EXEC SQL Đóng Cur1;
Để tăng cường ví dụ này, cách đọc kèo bóng đá biến máy chủ để lưu trữ cách đọc kèo bóng đá giá trị trongFetch
Có thể thu thập lệnh thành một cấu trúc. Để biết thêm chi tiết về cách đọc kèo bóng đá chủ trong mẫu cấu trúc, xemPhần 36.4.4.3.2. Để chuyển sang cấu trúc, ví dụ có thể được sửa đổi như dưới đây. Hai cách đọc kèo bóng đá chủ,intval
vàTextVal
, trở thành thành viên củacomp_t
Cấu trúc và cấu trúc được chỉ định trênFetch
lệnh.
EXEC SQL bắt đầu phần khai báo; Cấu trúc typedef int intval; Varchar TextVal [33]; comp_t; comp_t compval; EXEC SQL END TUYÊN BỐ TUYÊN BỐ; /* Đặt từng phần tử của cột loại tổng hợp vào danh sách chọn. */ EXEC SQL Tuyên bố con trỏ Cur1 cho Chọn (CompVal) .IntVal, (CompVal) .TextVal từ T4; EXEC SQL MỞ CUR1; EXEC SQL Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) /* Đặt tất cả cách đọc kèo bóng đá giá trị vào danh sách chọn vào một cấu trúc. */ EXEC SQL tìm nạp từ Cur1 thành: CompVal; printf ("intval =%d, textVal =%s \ n", compval.intval, compval.textval.arr); EXEC SQL Đóng Cur1;
Mặc dù cấu trúc được sử dụng trongFetch
lệnh, tên thuộc tính trongChọn
48869_48937*
48965_49022
... EXEC SQL Tuyên bố con trỏ Cur1 cho Chọn (compval).* Từ T4; EXEC SQL MỞ CUR1; EXEC SQL Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) /* Đặt tất cả cách đọc kèo bóng đá giá trị vào danh sách chọn vào một cấu trúc. */ EXEC SQL tìm nạp từ Cur1 thành: CompVal; printf ("intval =%d, textVal =%s \ n", compval.intval, compval.textval.arr);
theo cách này, cách đọc kèo bóng đá loại tổng hợp có thể được ánh xạ vào cách đọc kèo bóng đá cấu trúc gần như liền mạch, mặc dù ECPG không hiểu loại tổng hợp.
Cuối cùng, cũng có thể lưu trữ cách đọc kèo bóng đá giá trị loại tổng hợp trong biểu diễn chuỗi bên ngoài của chúng trong cách đọc kèo bóng đá biến máy chủ của loạichar []
hoặcVarchar []
. Nhưng theo cách đó, không dễ dàng truy cập cách đọc kèo bóng đá trường của giá trị từ chương trình máy chủ.
50100_50240char []
hoặcVarchar []
, và giải pháp này thực sự phù hợp và đủ cho nhiều loại.
Đây là một ví dụ sử dụng kiểu dữ liệuphức tạp
Từ ví dụ trongPhần 38.13. Biểu diễn chuỗi bên ngoài của loại đó là(%F,%F)
, được xác định trong cách đọc kèo bóng đá chức năngphức tạp_in ()
vàComplex_out ()
Chức năng trongPhần 38.13. Ví dụ sau chèn cách đọc kèo bóng đá giá trị loại phức(1,1)
và(3,3)
vào cách đọc kèo bóng đá cộtA
vàB
, và chọn chúng từ bảng sau đó.
51204_51654
Ví dụ này hiển thị kết quả sau:
a = (1,1), b = (3,3)
Một cách giải quyết khác là tránh sử dụng trực tiếp cách đọc kèo bóng đá loại do người dùng xác định trong ECPG và thay vào đó tạo ra một chức năng hoặc đúc chuyển đổi giữa loại do người dùng xác định và loại nguyên thủy mà ECPG có thể xử lý. Tuy nhiên, lưu ý rằng cách đọc kèo bóng đá phôi loại đó, đặc biệt là cách đọc kèo bóng đá loại ẩn, nên được đưa vào hệ thống loại rất cẩn thận.
Ví dụ,
52154_52309
Sau định nghĩa này, sau đây
EXEC SQL bắt đầu phần khai báo; Nhân đôi A, B, C, D; EXEC SQL END TUYÊN BỐ TUYÊN BỐ; a = 1; b = 2; c = 3; d = 4; EXEC SQL chèn vào cách đọc kèo bóng đá giá trị test_complex (created_complex (: a,: b), create_complex (: c,: d));
có tác dụng tương tự như
EXEC SQL chèn vào cách đọc kèo bóng đá giá trị test_complex ('(1,2)', '(3,4)');
cách đọc kèo bóng đá ví dụ trên không xử lý cách đọc kèo bóng đá giá trị null. Trên thực tế, cách đọc kèo bóng đá ví dụ truy xuất sẽ gây ra lỗi nếu chúng lấy giá trị null từ cơ sở dữ liệu. Để có thể chuyển cách đọc kèo bóng đá giá trị null vào cơ sở dữ liệu hoặc truy xuất cách đọc kèo bóng đá giá trị null từ cơ sở dữ liệu, bạn cần nối thêm thông số kỹ thuật của biến máy chủ thứ hai vào từng biến máy chủ chứa dữ liệu. Biến máy chủ thứ hai này được gọi làChỉ báovà chứa một lá cờ cho biết liệu dữ liệu có phải là null hay không, trong trường hợp đó, giá trị của biến máy chủ thực có bị bỏ qua hay không. Dưới đây là một ví dụ xử lý đúng cách đọc kèo bóng đá giá trị null một cách chính xác:
EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; Varchar val; int val_ind; EXEC cách đọc kèo bóng đá END TUYÊN BỐ TUYÊN BỐ: ... EXEC cách đọc kèo bóng đá Chọn B vào: val: val_ind từ test1;
Biến chỉ báo53808_53817
sẽ bằng không nếu giá trị không phải là null và nó sẽ âm nếu giá trị null. (Nhìn thấyPhần 36.16Để kích hoạt hành vi cụ thể của Oracle.)
54079_54251
Nếu đối số-r no_indicator
được chuyển cho bộ tiền xử lýECPG
, nó hoạt động trongMạnhkhông có chỉ sốKhănchế độ. Trong chế độ không chỉ định, nếu không có biến chỉ báo được chỉ định, cách đọc kèo bóng đá giá trị null được báo hiệu (trên đầu vào và đầu ra) cho cách đọc kèo bóng đá loại chuỗi ký tự là chuỗi trống và cho cách đọc kèo bóng đá loại số nguyên là giá trị thấp nhất có thể cho loại (ví dụ:int_min
choint
).
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.