Postgresql 9.3.25 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 33.ECPG- nhúngkèo bóng đá hôm nay và ngày mai:trong C | Tiếp theo |
inPhần 33.3Bạn đã thấy cách bạn Có thể thực hiện tỷ lệ kèo bóng đá câu lệnh SQL từ một chương trình SQL nhúng. Một số những câu lệnh đó chỉ được sử dụng tỷ lệ kèo bóng đá giá trị cố định và không cung cấp một cách Để chèn tỷ lệ kèo bóng đá giá trị do người dùng cung cấp vào tỷ lệ kèo bóng đá câu lệnh hoặc có chương trình Xử lý tỷ lệ kèo bóng đá giá trị được trả về bởi truy vấn. Những loại tuyên bố đó không thực sự hữu ích trong tỷ lệ kèo bóng đá ứng dụng thực sự. Phần này giải thích chi tiết về cách bạn có thể truyền dữ liệu giữa chương trình C của bạn và tỷ lệ kèo bóng đá câu lệnh SQL được nhúng bằng một cơ chế đơn giản gọi làtỷ lệ kèo bóng đá chủ. Trong một chương trình SQL nhúng, chúng tôi coi tỷ lệ kèo bóng đá câu lệnh SQL làKháchTrong mã chương trình C làMáy chủ ngôn ngữ. Do đó, tỷ lệ kèo bóng đá biến của chương trình C được gọi làtỷ lệ kèo bóng đá chủ.
Một cách khác để trao đổi giá trị giữa tỷ lệ kèo bóng đá phụ trợ PostgreSQL và tỷ lệ kèo bóng đá ứng dụng ECPG là việc sử dụng tỷ lệ kèo bóng đá mô tả SQL, được mô tả trongPhần 33.7.
Chuyển dữ liệu giữa chương trình C và tỷ lệ kèo bóng đá câu lệnh SQL là Đặc biệt đơn giản trong SQL nhúng. Thay vì có chương trình Dán dữ liệu vào tuyên bố, đòi hỏi nhiều tỷ lệ kèo bóng đá biến chứng, chẳng hạn như trích dẫn đúng giá trị, bạn có thể đơn giản Viết tên của biến C vào câu lệnh SQL, được đặt trước bởi một đại tràng. Ví dụ:
EXEC SQL chèn vào tỷ lệ kèo bóng đá giá trị một số (: v1, 'foo',: v2);
Câu tỷ lệ kèo bóng đánh này đề cập đến hai biến C có tênV1vàV2và cũng sử dụng một Chuỗi tỷ lệ 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.
Phong cách chèn c biến C trong tỷ lệ kèo bóng đá câu lệnh SQL hoạt động Bất cứ nơi nào một biểu thức giá trị được mong đợi trong câu lệnh SQL.
Để chuyển dữ liệu từ chương trình sang cơ sở dữ liệu, ví dụ như 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, tỷ lệ kèo bóng đá biến C được dự định chứa dữ liệu này cần được khai báo trong tỷ lệ kèo bóng đá phần được đánh dấu đặc biệt, vì vậy Bộ xử lý tiền xử lý SQL được biết về chúng.
12850_12877
EXEC tỷ lệ kèo bóng đá BẮT ĐẦU phần khai báo;
và kết thúc bằng:
phần khai báo kết thúc tỷ lệ kèo bóng đá;
Giữa những dòng đó, phải có biến C bình thường Tuyên bố, 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 chọn 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 của nó trong chương trình. Bạn cũng có thể khai báo tỷ lệ kèo bóng đá biến với cú pháp sau đây sẽ tạo ra một Phần khai báo:
EXEC tỷ lệ kèo bóng đá INT I = 4;
Bạn có thể có nhiều phần khai báo trong một chương trình như bạn giống.
tỷ lệ kèo bóng đá khai báo cũng được lặp lại với tệp đầu ra là C bình thường C bình thường tỷ lệ kèo bóng đá biến, vì vậy không cần phải khai báo chúng một lần nữa. tỷ lệ kèo bóng đá biến đó không được sử dụng trong tỷ lệ kèo bóng đá lệnh SQL có thể được khai báo Bình thường bên ngoài tỷ lệ 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áo13934_14037
Bây giờ bạn sẽ có thể truyền dữ liệu được tạo bởi chương trình của mình vào một 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 tỷ lệ kèo bóng đá biến thể đặc biệt của tỷ lệ kèo bóng đá lệnh thông thườngChọnvàFetch. tỷ lệ kèo bóng đá lệnh này có một đặc biệtthànhmệnh đề chỉ định tỷ lệ kèo bóng đá biến máy chủ nào tỷ lệ 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ề đơn lẻ hàng vàFetchđược sử dụng cho một truy vấn mà 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 tỷ lệ kèo bóng đá bắt đầu phần khai báo; int v1; Varchar v2; EXEC tỷ lệ kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; ... EXEC tỷ lệ kèo bóng đá Chọn a, b vào: v1,: v2 từ kiểm tra;
SOthànhmệnh đề xuất hiện giữa Chọn Danh sách vàtừmệnh đề. tỷ lệ kèo bóng đá Số phần tử trong danh sách chọn và danh sách sauthành(còn gọi là danh sách đích) bình đẳng.
Đây là một ví dụ sử dụng tỷ lệ kèo bóng đánhFetch:
EXEC tỷ lệ kèo bóng đá BẮT ĐẦU phần khai báo; int v1; Varchar v2; EXEC tỷ lệ kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; ... EXEC tỷ lệ kèo bóng đá khai báo con trỏ foo cho chọn a, b từ thử nghiệm; ... LÀM ... EXEC tỷ lệ kèo bóng đá tìm nạp tiếp theo từ foo thành: v1,: v2; ... trong khi (...);
ở đâythànhmệnh đề xuất hiện sau tất cả tỷ lệ kèo bóng đá điều khoản bình thường.
15914_16334
Về mặt này, có hai loại dữ liệu: một số đơn giản tỷ lệ kèo bóng đá loại dữ liệu PostgreSQL, chẳng hạn nhưSố nguyênvàText16495_16589Dấu thời gianvàSốChỉ có thể được truy cập thông qua tỷ lệ kèo bóng đá chức năng thư viện đặc biệt; nhìn thấyPhần 33.4.4.2.
Bảng 33-1Hiển thị tỷ lệ kèo bóng đá loại dữ liệu PostgreSQL tương ứng với c loại dữ liệu. Khi bạn muốn gửi hoặc nhận giá trị của một Kiểu dữ liệu PostgreSQL, bạn nên khai báo một biến C của Kiểu dữ liệu C tương ứng trong phần khai báo.
Bảng 33-1. Ánh xạ giữa tỷ lệ kèo bóng đá loại dữ liệu PostgreSQL và C Loại biến
Loại dữ liệu PostgreSQL | Loại tỷ lệ 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 |
18215_18233 | Double |
SmallSerial | ngắn |
Nối tiếp | int |
BigSerial | dài int |
OID | unsign int |
ký tự (n), Varchar (n), Text | char [n+1], Varchar [n+1][B] |
tên | char [tên được đặt tên] |
Dấu thời gian | 19230_19241[A] |
Khoảng | Khoảng[A] |
ngày | ngày[A] |
Boolean | bool[C] |
ghi chú: a.Loại này chỉ có thể được truy cập thông qua tỷ lệ kèo bóng đá chức năng thư viện đặc biệt; nhìn thấyPhần 33.4.4.2. b.được khai báo trongEcpglib.h c.được khai báo trongecpglib.hnếu không bản địa |
Để xử lý tỷ lệ kèo bóng đá loại dữ liệu chuỗi ký tự SQL, chẳng hạn nhưVarcharvàText, có hai tỷ lệ kèo bóng đá cách có thể để khai báo tỷ lệ kèo bóng đá biến máy chủ.
Một cách đang sử dụngchar [], một mảngChar, đó là cách xử lý phổ biến nhất Dữ liệu ký tự trong C.
EXEC tỷ lệ kèo bóng đá bắt đầu khai báo; char str [50]; Exec tỷ lệ kèo bóng đá end decare phần;
Lưu ý rằng bạn phải tự chăm sóc độ dài. Nếu bạn sử dụng tỷ lệ kèo bóng đá chủ này làm biến mục tiêu của một truy vấn Trả về một chuỗi với hơn 49 ký tự, một bộ đệm tràn xảy ra.
Cách khác là sử dụngVarchar21242_21328Varcharđược chuyển đổi thành A Được đặt 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ảngMáy chủ lưu trữ chuỗi bao gồm một byte chấm dứt bằng không. Do đó, để lưu trữ một chuỗi trong mộtVarchartỷ lệ kèo bóng đá chủ, tỷ lệ kèo bóng đá chủ có Để được khai báo với độ dài bao gồm cả bộ kết thúc byte bằng không. Thành viênlengiữ chiều dài của Chuỗi được lưu trữ trongmảngKhông có Chấm dứt byte 0. Khi một tỷ lệ kèo bóng đá chủ được sử dụng làm đầu vào cho một Truy vấn, nếustrlen (mảng)vàlenlà khác nhau, cái ngắn hơn được sử dụng.
Varcharcó thể được viết ở trên hoặc dưới trường hợp, nhưng không trong trường hợp hỗn hợp.
CharvàVarcharBiến máy chủ cũng có thể giữ tỷ lệ kèo bóng đá giá trị của tỷ lệ kèo bóng đá loại SQL khác, sẽ được lưu trữ trong tỷ lệ 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. TRONG đặc biệt, nó đã triển khai hỗ trợ choSố, thập phân, ngày, Dấu thời gianvàKhoảngLoại. tỷ lệ kèo bóng đá loại dữ liệu này không thể có được ánh xạ tới tỷ lệ kèo bóng đá loại biến máy chủ nguyên thủy (chẳng hạn nhưint, dài inthoặcchar []), vì chúng có nội bộ phức tạp kết cấu. tỷ lệ kèo bóng đá ứng dụng liên quan đến tỷ lệ kèo bóng đá loại này bằng cách tuyên bố máy chủ tỷ lệ kèo bóng đá biến trong tỷ lệ kèo bóng đá loại đặc biệt và truy cập chúng bằng cách sử dụng tỷ lệ 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 33.6chứa cơ bản tỷ lệ kèo bóng đá chức năng để đối phó với tỷ lệ kèo bóng đá loại đó, sao cho bạn không cần Gửi truy vấn đến máy chủ SQL chỉ để thêm một khoảng thời gian ví dụ dấu thời gian.
tỷ lệ kèo bóng đá tiểu mục sau mô tả tỷ lệ kèo bóng đá loại dữ liệu đặc biệt này. Vì Thông tin chi tiết về tỷ lệ kèo bóng đá chức năng thư viện PGTYPES, xemPhần 33.6.
Đây là một mẫu để xử lýdấu thời gianBiế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 đề choTimestamploại:
#include <pgtypes_timestamp.h
Tiếp theo, khai báo tỷ lệ kèo bóng đá chủ dưới dạng loạiDấu thời gianTrong phần khai báo:
24292_24369
Và sau khi đọc một giá trị vào biến máy chủ, hãy xử lý nó
Sử dụng tỷ lệ kèo bóng đá chức năng thư viện PGTYPES. Trong ví dụ sau,Dấu thời gianGiá trị được chuyển đổi thành văn bản
(Ascii) biểu mẫu vớipgtypestimestamp_to_asc ()
chức năng:
EXEC tỷ lệ 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. tỷ lệ kèo bóng đá
chương trình phải bao gồmpgtypes_date.h,,
khai báo một tỷ lệ kèo bóng đá chủ là loại ngày và chuyển đổi giá trị ngày
vào 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
Giới thiệu về tỷ lệ kèo bóng đá chức năng của thư viện PGTYPES, xemPhần 33.6.
Xử lýKhoảngLoại cũng vậy Tương tự nhưdấu thời gianvàngàyLoại. Tuy nhiên, nó được yêu cầu để phân bổ bộ nhớ cho mộtKhoảngLoại giá trị rõ ràng. TRONG tỷ lệ kèo bóng đá từ 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ụ:
#include <stdio.h #include <stdlib.h #include <pgtypes_interval.h int Main (Void) EXEC tỷ lệ kèo bóng đá bắt đầu phần khai báo; khoảng *in; EXEC tỷ lệ kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; EXEC tỷ lệ kèo bóng đá Kết nối với TestDB; Exec tỷ lệ kèo bóng đá chọn pg_catalog.set_config ('search_path', '', false); Exec tỷ lệ kèo bóng đá cam kết; in = pgtyPesInterval_new (); Exec tỷ lệ kèo bóng đá Chọn '1 phút' :: khoảng vào: in; printf ("khoảng = %s \ n", pgtypesInterval_to_asc (in)); PgtypesInterval_free (in); Exec tỷ lệ kèo bóng đá cam kết; EXEC tỷ lệ kèo bóng đá Ngắt kết nối tất cả; trả lại 0;
Xử lýSốvàthập phântỷ lệ kèo bóng đá loại tương tự nhưKhoảngLoại: Nó yêu cầu xác định con trỏ, phân bổ một số không gian bộ nhớ trên đống và truy cập Biến sử dụng tỷ lệ kèo bóng đá chức năng thư viện PGTYPES. Để biết thêm chi tiết Giới thiệu về tỷ lệ kèo bóng đá chức năng của thư viện PGTYPES, xemPhần 33.6.
Không có chức năng nào được cung cấp cụ thể chothập phânLoại. Một ứng dụng phải chuyển đổi nó thànhSốBiến sử dụng thư viện PGTYPES chức năng để 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ânLoại biến.
27329_28520
Là một tỷ lệ 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 tỷ lệ 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 trongPhần 33.4.4.1. Thứ hai sử dụng trường hợp là lấy nhiều hàng từ kết quả truy vấn mà không có Sử dụng một con trỏ. Không có một mảng, để xử lý kết quả truy vấn Bao gồm nhiều hàng, bắt buộc phải sử dụng con trỏ vàFetchLệnh. Nhưng với máy chủ mảng tỷ lệ kèo bóng đá biến, nhiều hàng có thể được nhận cùng một lúc. Chiều dài của Mảng phải được xác định để có thể chứa tất cả tỷ lệ kèo bóng đá hàng, nếu không thì một bộ đệm có thể xảy ra.
29616_29646pg_databaseBảng hệ thống và hiển thị tất cả tỷ lệ kèo bóng đá OID và tên của có sẵn Cơ sở dữ liệu:
29783_30401
Ví dụ này hiển thị kết quả sau. (tỷ lệ kèo bóng đá giá trị chính xác phụ thuộc vào hoàn cảnh địa phương.)
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 truy vấn Kết quả, có thể được sử dụng để truy xuất nhiều cột cùng một lúc. tỷ lệ kèo bóng đá Cấu trúc cho phép xử lý nhiều giá trị cột trong một máy chủ Biến.
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_databaseBả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_tVới tỷ lệ kèo bóng đá thành viên
có tên khớp với từng cột trongChọnKết quả được sử dụng để lấy một hàng kết quả
mà không cần đặt nhiều tỷ lệ kèo bóng đá chủ vàoFetchcâu tỷ lệ kèo bóng đánh.
EXEC SQL BẮT ĐẦU phần khai báo; Cấu trúc typedef int oid; DatName char [65]; Kích thước int dài dài; dbinfo_t; dbinfo_t dbval; 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; /* In tỷ lệ 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, dbval.size); EXEC SQL Đóng Cur1;
Ví dụ này hiển thị kết quả sau. (tỷ lệ kèo bóng đá giá trị chính xác phụ thuộc vào hoàn cảnh địa phương.)
32450_32616
tỷ lệ kèo bóng đá chủ cấu trúc"hấp thụ"như Nhiều cột là cấu trúc như tỷ lệ kèo bóng đá trường. tỷ lệ kèo bóng đá cột bổ sung có thể là được gán cho tỷ lệ 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ớisizeBiến bên ngoài cấu trúc:
32962_33731
Sử dụngtypedefTừ khóa để ánh xạ mới tỷ lệ kèo bóng đá loại thành tỷ lệ kèo bóng đá loại đã có.
EXEC tỷ lệ kèo bóng đá bắt đầu phần khai báo; typedef char mychartype [40]; typedef dài serial_t; Exec tỷ lệ kèo bóng đá end decare phần;
Lưu ý rằng bạn cũng có thể sử dụng:
EXEC tỷ lệ 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 tuyên bố phần.
Bạn có thể khai báo con trỏ cho tỷ lệ kèo bóng đá loại phổ biến nhất. Lưu ý tuy nhiên rằng bạn không thể sử dụng con trỏ làm biến mục tiêu của tỷ lệ kèo bóng đá truy vấn mà không có tự động định vị. Nhìn thấyPhần 33.7Để biết thêm thông tin về phân bổ tự động.
EXEC tỷ lệ kèo bóng đá bắt đầu phần khai báo; int *intp; char ** charp; Exec tỷ lệ kèo bóng đá end decare phần;
Phần này chứa thông tin về cách xử lý Nonscalar và tỷ lệ kèo bóng đá loại dữ liệu cấp SQL do người dùng xác định trong tỷ lệ kèo bóng đá ứng dụng ECPG. Lưu ý rằng Điều này khác với việc xử lý tỷ lệ kèo bóng đá biến chủ của tỷ lệ kèo bóng đá loại không nguyên tắc, được mô tả trong phần trước.
Mảng cấp độ SQL đa chiều không được hỗ trợ trực tiếp trong ECPG. tỷ lệ kèo bóng đá mảng cấp độ SQL một chiều có thể được ánh xạ vào mảng c tỷ lệ kèo bóng đá biến chủ và ngược lại. Tuy nhiên, khi tạo một tuyên bố ECPG không biết tỷ lệ kèo bóng đá loại cột, để nó không thể Kiểm tra xem một mảng C có nhập vào một mảng cấp độ SQL tương ứng không. Khi xử lý đầu ra của câu lệnh SQL, ECPG có thông tin cần thiết và do đó kiểm tra xem cả hai đều là mảng.
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 tỷ lệ 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ì Ví dụ, nếu một loại cột là mảngSố nguyên, một tỷ lệ kèo bóng đá chủ của loạiintcó thể được sử dụng. Ngoài ra nếu loại phần tử làVarcharhoặcText, một tỷ lệ kèo bóng đá chủ 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 phần 4 của mảng và lưu trữ nó vào một tỷ lệ kèo bóng đá chủ của loạiint:
EXEC tỷ lệ kèo bóng đá BẮT ĐẦU phần khai báo; int ii; EXEC tỷ lệ kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; EXEC tỷ lệ kèo bóng đá khai báo con trỏ Cur1 cho Chọn II [4] từ T3; EXEC tỷ lệ kèo bóng đá MỞ CUR1; EXEC tỷ lệ kèo bóng đá Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) EXEC tỷ lệ kèo bóng đá tìm nạp từ Cur1 vào: II; printf ("ii =%d \ n", ii); EXEC tỷ lệ kèo bóng đá Đóng Cur1;
Ví dụ này hiển thị kết quả sau:
ii = 4
Để ánh xạ nhiều phần tử mảng đến nhiều phần tử trong một loại mảng biến biến từng biến mỗi phần tử của cột mảng và mỗi phần phần tử của mảng tỷ lệ kèo bóng đá chủ phải được quản lý riêng, Ví dụ:
EXEC tỷ lệ kèo bóng đá BẮT ĐẦU phần khai báo; int ii_a [8]; EXEC tỷ lệ kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; EXEC tỷ lệ kèo bóng đá khai báo con trỏ Cur1 cho chọn II [1], II [2], II [3], II [4] từ T3; EXEC tỷ lệ kèo bóng đá MỞ CUR1; EXEC tỷ lệ kèo bóng đá Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) Exec tỷ lệ kèo bóng đá tìm nạp từ Cur1 vào: ii_a [0],: ii_a [1],: ii_a [2],: ii_a [3]; ...
Lưu ý lại rằng
EXEC tỷ lệ kèo bóng đá bắt đầu phần khai báo; int ii_a [8]; EXEC tỷ lệ kèo bóng đá END TUYÊN BỐ TUYÊN BỐ; EXEC tỷ lệ kèo bóng đá tuyên bố con trỏ Cur1 cho Chọn II từ T3; EXEC tỷ lệ kèo bóng đá MỞ CUR1; EXEC tỷ lệ kèo bóng đá Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) /* SAI */ EXEC tỷ lệ kèo bóng đá tìm nạp từ Cur1 vào: ii_a; ...
sẽ không hoạt động chính xác trong trường hợp này, vì bạn không thể ánh xạ một Cột loại mảng thành một tỷ lệ kèo bóng đá chủ mảng trực tiếp.
38074_38180char []hoặcVarchar []. Để biết thêm Chi tiết về đại diện này, xemPhần 8.15.2. Lưu ý rằng điều này có nghĩa là rằng mảng không thể được truy cập một cách tự nhiên dưới dạng một mảng trong máy chủ chương trình (không xử lý thêm mà phân tích lại văn bản đại diện).
tỷ lệ kèo bóng đá loại tổng hợp không được hỗ trợ trực tiếp trong ECPG, nhưng dễ dàng Cách giải quyết là có thể. tỷ lệ kèo bóng đá cách giải quyết có sẵn tương tự như những cái được mô tả cho tỷ lệ kèo bóng đá mảng ở trên: hoặc truy cập từng thuộc tính riêng hoặc sử dụng biểu diễn chuỗi bên ngoài.
Đối với tỷ lệ kèo bóng đá ví dụ sau, giả sử loại sau và bàn:
Tạo loại comp_t AS (Intval Integer, TextVal Varchar (32)); Tạo Bảng T4 (compval comp_t); Chèn vào tỷ lệ kèo bóng đá giá trị T4 ((256, 'PostgreSql'));
Giải pháp rõ ràng nhất là truy cập từng thuộc tính riêng. Chương trình sau lấy dữ liệu từ ví dụ bảng bằng cách chọn từng thuộc tính của loạicomp_triê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 tỷ lệ 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, tỷ lệ kèo bóng đá biến máy chủ để lưu trữ tỷ lệ kèo bóng đá giá trị trong TheFetchCó thể thu thập lệnh thành một kết cấu. Để biết thêm chi tiết về tỷ lệ kèo bóng đá chủ trong Mẫu cấu trúc, xemPhần 33.4.4.3.2. Để chuyển sang cấu trúc, ví dụ có thể được sửa đổi như dưới đây. Hai tỷ lệ kèo bóng đá chủ,intvalvàTextVal, trở thành thành viên củacomp_tCấu trúc và cấu trúc được chỉ định TrênFetchtỷ lệ kèo bóng đánh.
EXEC SQL bắt đầu 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ả tỷ lệ 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 trong41205_41212tỷ lệ kèo bóng đánh, tên thuộc tính trongChọnmệnh đề được chỉ định từng cái một. Điều này có thể được được nâng cao bằng cách sử dụng*Để yêu cầu tất cả thuộc tính của giá trị loại tổng hợp.
... 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ả tỷ lệ 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, tỷ lệ kèo bóng đá loại tổng hợp có thể được ánh xạ vào tỷ lệ 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 chính nó.
Cuối cùng, cũng có thể lưu trữ tỷ lệ 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 tỷ lệ kèo bóng đá biến máy chủ thuộc loạichar []hoặcVarchar []. Nhưng theo cách đó, không dễ dàng truy cập tỷ lệ kèo bóng đá trường của giá trị từ chương trình máy chủ.
42363_42503char []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ạpTừ ví dụ trongPhần 35.11. Biểu diễn chuỗi bên ngoài
thuộc loại đó là(%f,%f), được xác định
trong tỷ lệ kèo bóng đá chức năngComplex_in ()
vàComplex_out ()
Chức năng trongPhần 35.11. Ví dụ sau đây chèn
tỷ lệ kèo bóng đá giá trị loại phức(1,1)và(3,3)vào tỷ lệ kèo bóng đá cộtA43206_43213B43237_43283
EXEC SQL bắt đầu phần khai báo; Varchar A [64]; Varchar B [64]; EXEC SQL END TUYÊN BỐ TUYÊN BỐ; Exec sql chèn vào tỷ lệ kèo bóng đá giá trị test_complex ('(1,1)', '(3,3)'); EXEC SQL Tuyên bố con trỏ Cur1 cho Chọn A, B từ Test_Complex; EXEC SQL MỞ CUR1; EXEC SQL Bất cứ khi nào không tìm thấy bị phá vỡ; while (1) Exec SQL tìm nạp từ Cur1 thành: A,: B; printf ("a =%s, b =%s \ n", a.arr, b.arr); EXEC SQL Đóng Cur1;
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 đang tránh sử dụng trực tiếp tỷ lệ kèo bóng đá loại do người dùng xác định trong ECPG và thay vào đó tạo chức năng hoặc diễn viên chuyển đổi giữa loại do người dùng xác định và loại nguyên thủy ECPG đó có thể xử lý. Lưu ý, tuy nhiên, loại diễn viên đó, đặc biệt là những cái ngầm, nên được đưa vào hệ thống loại cẩn thận.
Ví dụ:
44230_44384
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 tỷ lệ 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 tỷ lệ kèo bóng đá giá trị test_complex ('(1,2)', '(3,4)');
tỷ lệ kèo bóng đá ví dụ trên không xử lý tỷ lệ kèo bóng đá giá trị null. Trong thực tế, tỷ lệ 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 tỷ lệ kèo bóng đá giá trị null vào cơ sở dữ liệu hoặc lấy tỷ lệ kèo bóng đá giá trị null từ cơ sở dữ liệu, bạn cần nối thêm một Thông số kỹ thuật biến máy chủ thứ hai cho 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 xem có Datum là null, trong trường hợp đó là giá trị của máy chủ thực Biến bị bỏ qua. Đây là một ví dụ xử lý việc truy xuất của tỷ lệ kèo bóng đá giá trị null một cách chính xác:
EXEC tỷ lệ kèo bóng đá bắt đầu phần khai báo; Varchar val; int val_ind; EXEC tỷ lệ kèo bóng đá END TUYÊN BỐ TUYÊN BỐ: ... EXEC tỷ lệ kèo bóng đá Chọn B vào: val: val_ind từ test1;
Biến chỉ báoVal_indsẽ là số 0 nếu giá trị không phải là null và nó sẽ âm nếu giá trị là null.
Chỉ báo có chức năng khác: Nếu giá trị chỉ báo là Tích cực, điều đó có nghĩa là giá trị không phải là vô giá trị, nhưng nó đã bị cắt Khi nó được lưu trữ trong tỷ lệ kèo bóng đá chủ.
Nếu đối số-R NO_INDICATORIS được chuyển cho bộ tiền xử lýECPG, nó hoạt động TRONG"Không có chỉ số"chế độ. Trong không có chỉ địa chế độ, nếu không có biến chỉ báo được chỉ định, tỷ lệ kèo bóng đá giá trị null là được báo hiệu (trên đầu vào và đầu ra) cho tỷ lệ kèo bóng đá loại chuỗi ký tự là trống Chuỗi và cho tỷ lệ kèo bóng đá loại số nguyên là giá trị thấp nhất có thể cho loại (Ví dụ,int_minchoint).