Postgresql 9.2.24 Tài liệu | ||||
---|---|---|---|---|
prev | UP | Chương 33.ECPG- nhúngtỷ lệ kèo bóng đá trực tuyến hôm nay:trong C | NEXT |
inPhần 33.3Bạn đã thấy cách Bạn có thể thực hiện cách đọc kèo bóng đá câu lệnh SQL từ một chương trình SQL nhúng. Một số trong số cách đọc kèo bóng đá câu lệnh chỉ được sử dụng cách đọc kèo bóng đá giá trị cố định và không cung cấp cách chèn cách đọc kèo bóng đá giá trị do người dùng cung cấp vào cách đọc kèo bóng đá câu lệnh hoặc có Chương trình xử lý cách đọc kèo bóng đá giá trị được trả về bởi truy vấn. Những loại đó cách đọc kèo bóng đá tuyên bố không thực sự hữu ích trong cách đọc kèo bóng đá ứng dụng thực sự. Cái này Phần giải thích chi tiết về cách bạn có thể truyền dữ liệu giữa c của bạn chương trình và cách đọc kèo bóng đá câu lệnh SQL nhúng bằng cơ chế đơn giản gọi điệncách đọc kèo bóng đá chủ. Trong một nhúng Chương trình SQL 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àMáy chủ Biến.
Một cách khác để trao đổi giá trị giữa cách đọc kèo bóng đá phụ trợ PostgreSQL và cách đọc kèo bóng đá ứng dụng ECPG là việc sử dụng cách đọc kèo bóng đá mô tả SQL, được mô tả trongPhần 33.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 là Đặc biệt đơn giản trong SQL nhúng. Thay vì có lập trình dán dữ liệu vào tuyên bố, đò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 Có thể chỉ cần viết tên của một biến C vào SQL Tuyên bố, tiền tố bởi một đại tràng. 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ênV1vàV2và 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.
Phong cách chèn c biến C trong cách đọc 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 SQL tuyên bố.
12780_13102
Phần này bắt đầu bằng:
EXEC cách đọc 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 cách đọc kèo bóng đá;
Giữa cách đọc kèo bó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ể chỉ định giá trị ban đầu đến 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ó thể cũng khai báo cách đọc kèo bóng đá biến với cú pháp sau Hoàn toàn tạo ra một phần khai báo:
EXEC cách đọc 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.
cách đọc kèo bóng đá khai báo cũng được lặp lại với tệp đầu ra là cách đọc kèo bóng đá biến C bình thường, vì vậy 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áoPhầ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ể truyền dữ liệu được tạo bởi lập trì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 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ọnvàFetch. Những cái này cách đọc kèo bóng đá lệnh có một đặc biệtthànhmệnh đề chỉ định cách đọc kèo bóng đá biến máy chủ nào cách đọc kèo bóng đá giá trị được truy xuất được lưu trữ trong.Chọnđược sử dụng cho một Truy vấn chỉ trả về một hàng duy nhất 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;
Vì vậy,thànhmệ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.
Đây là một ví dụ sử dụng lệnhFetch:
EXEC cách đọc kèo bóng đá bắt đầu 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ànhmệnh đề xuất hiện sau tất cả cách đọc kèo bóng đá mệnh đề bình thường.
16409_16857
Về mặt này, có hai loại dữ liệu: một số cách đọc kèo bóng đá loại dữ liệu PostgreSQL đơn giản, chẳng hạn nhưSố nguyênvàText, có thể đọc được và được viết trực tiếp bởi ứng dụng. Dữ liệu PostgreSQL khác cách đọc kèo bóng đá loại, chẳng hạn nhưDấu thời gianvàSốChỉ có thể được truy cập thông qua đặc biệt chức năng thư viện; nhìn thấy17321_17343.
Bảng 33-1hiển thị cách đọc kèo bóng đá loại dữ liệu PostgreSQL tương ứng với đó C kiểu dữ liệu. Khi bạn muốn gửi hoặc nhận giá trị của một Cho 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 dữ liệu PostgreSQL Loại và 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 |
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 | Dấu thời gian[A] |
Khoảng | Khoảng[A] |
ngày | ngày[A] |
21412_21421 | bool[C] |
ghi chú: a.Loại này chỉ có thể 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 33.4.4.2. b.Tuyên bố TRONGecpglib.h c.Tuyên bố TRONG22180_22191Nếu không tự nhiên |
Để xử lý cách đọc kèo bóng đá loại dữ liệu chuỗi ký tự SQL, chẳng hạn nhưVarcharvàText,, Có hai cách đọc kèo bóng đá có thể để khai báo chủ nhà biến.
Một cách đọc kèo bóng đá đang sử dụngchar [], một mảngChar22712_22781
EXEC cách đọc kèo bóng đá BẮT ĐẦU phần 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 chiều dài. Nếu như 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ề một chuỗi với hơn 49 ký tự, một bộ đệm tràn xảy ra.
cách đọc kèo bóng đá khác là sử dụngVarcharLoại, là loại đặc biệt được cung cấp bởi ECPG. cách đọc kèo bóng đá Định nghĩa trên một mảng loạiVarcharđược chuyển đổi thành một cái tênstructcho 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 AVarcharcách đọc kèo bóng đá chủ, The cách đọc kèo bóng đá chủ phải được khai báo với độ dài bao gồm cả Kẻ hủy diệt byte bằng không. Thành viên23962_23967Giữ độ dài của chuỗi được lưu trữ trongmảngKhông có Chấm dứt byte 0. Khi một cách đọc 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, ngắn hơn một được sử dụng.
Varcharcó thể được viết ở phía trên hoặc chữ thường, nhưng không trong trường hợp hỗn hợp.
charvàVarcharBiế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 chuỗi của chúng biểu mẫu.
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ừ PostgreSQL máy chủ. Cụ thể, nó đã triển khai hỗ trợ choSố, thập phân, ngày, dấu thời gian, VàKhoảngLoại. Nhữ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, Long Long inthoặcchar []25342_25602Phần 33.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 đó, sao cho bạn không cần phải gửi một truy vấn đến máy chủ SQL chỉ để thêm một khoảng thời gian Ví dụ đóng dấu.
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 33.6.
Đây là một mẫu để xử lýDấu thời gian26241_26291
Đầu tiên, chương trình phải bao gồm tệp tiêu đề cho Thedấu thời gianloại:
#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 gianTrong phần khai báo:
26650_26729
Và sau khi đọc một giá trị vào biến máy chủ,
Xử lý nó bằng cách đọc kèo bóng đá chức năng thư viện PGTYPES. Sau đây
Ví dụ,Dấu thời gianGiá trị là
đượ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Ờ () :: Timestamp thành: 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ý trong cùng một
đườ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
sử dụngpgtypesdate_to_asc ()
27637_27724Phần
33.6.
Xử lýKhoảngLoại cũng tương tự nhưDấu thời gianvàngàyLoại. Nó được yêu cầu, tuy nhiên, để phân bổ bộ nhớ cho mộtKhoảngLoạ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ụ:
#include <stdio.h #include <stdlib.h #include <pgtypes_interval.h int Main (Void) EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; khoảng *in; 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; in = pgtyPesInterval_new (); Exec cách đọc 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 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ýSốvàthập phâncách đọc kèo bóng đá loại tương tự nhưKhoảngLoại: nó yêu cầu xác định a 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, 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 chức năng thư viện pgtypes để làm thêm xử lý.
Đây là một ví dụ về xử lý chương trìnhSốvàthập phânLoạ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; 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;
31346_31430
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 trongPhần 33.4.4.1. cách đọc kèo bóng đá Trường hợp sử dụng thứ hai là lấy nhiều hàng từ truy vấn kết quả mà không sử dụng con trỏ. Không có một mảng, để xử lý Một kết quả truy vấn bao gồm nhiều hàng, nó được yêu cầu Để sử dụng con trỏ vàFetchLệnh. Nhưng với cách đọc kèo bóng đá biến máy chủ mảng, nhiều hàng có thể được nhận ngay lập tức. Chiều dài của mảng phải là được xác định để có thể chứa tất cả cách đọc kèo bóng đá hàng, nếu không tràn bộ đệm có thể sẽ xảy ra.
Ví dụ sau quétpg_databaseBảng hệ thống và hiển thị tất cả cách đọc kèo bóng đá OIDS và tên của cơ sở dữ liệu có sẵn:
int Main (Void) EXEC SQL bắt đầu phần khai báo; int dbid [8]; DBName char [8] [16]; int i; EXEC SQL END TUYÊN BỐ TUYÊN BỐ; memset (dbname, 0, sizeof (char) * 16 * 8); memset (dbid, 0, sizeof (int) * 8); EXEC SQL Kết nối với TestDB; /* Lấy nhiều hàng vào cách đọc kèo bóng đá mảng cùng một lúc. */ EXEC SQL Chọn OID, DATNAME thành: DBID,: DBNAME từ pg_database; for (i = 0; i <8; i ++) printf ("oid =%d, dbname =%s \ n", dbid [i], dbname [i]); Exec sql cam kết; EXEC SQL Ngắt kết nối tất cả; trả lại 0;
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 đị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 phù hợp với tên cột của Một kết quả truy vấn, có thể được sử dụng để truy xuất nhiều cột tại một lần. 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ủ duy nhất.
Ví dụ sau lấy OIDS, tên và kích cỡ
của cơ sở dữ liệu có sẵn từ33971_33984Bảng hệ thống và sử dụngpg_database_size ()
34071_34130dbinfo_tVới cách đọc kèo bóng đá thành viên có tên khớp với mỗi
cột trongChọnKết quả là
đượ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 đá biến máy chủ trongFetchcâu lệ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 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, dbval.size); EXEC SQL Đóng Cur1;
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 địa phương.)
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úc"hấp thụ"nhiều cột như cấu trúc như Cánh đồng. cách đọc kèo bóng đá cột bổ sung có thể được gán cho máy chủ khác Biến. Ví dụ, chương trình trên cũng có thể là Tái cấu trúc như thế này, vớisizeBiến bên ngoài cấu trúc:
35945_36716
Sử dụngtypedefTừ khóa để bản đồ cách đọc kèo bóng đá loại mới cho cách đọc kèo bóng đá loại đã có.
EXEC cách đọc kèo bóng đá bắt đầu phần 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 tuyên bố phần.
Bạn có thể khai báo con trỏ đến cách đọc kèo bóng đá loại phổ biến nhất. Ghi chú tuy nhiên bạn không thể sử dụng con trỏ như cách đọc kèo bóng đá biến mục tiêu của Truy vấn mà không cần phân bổ tự động. Nhìn thấy37712_37726Để biết thêm thông tin về phân bổ tự động.
EXEC cách đọc kèo bóng đá bắt đầu phần khai báo; int *intp; char ** charp; Exec cách đọc kèo bóng đá end decare phần;
Phần này chứa thông tin về cách xử lý Nonscalar và cách đọc kèo bóng đá loại dữ liệu cấp SQL do người dùng xác định trong cách đọc kèo bóng đá ứng dụng ECPG. Lưu ý rằng điều này khác biệt với việc xử lý cách đọc kèo bóng đá biến chủ của cách đọc kèo bóng đá loại không nguyên nhân, được mô tả trong phần trước.
Mảng cấp độ SQL đa chiều không trực tiếp được hỗ trợ trong ECPG. cách đọc kèo bóng đá mảng cấp độ SQL một chiều có thể được ánh xạ vào cách đọc kèo bóng đá biến máy chủ c mảng C và ngược lại. Tuy nhiên, Khi tạo một câu lệnh ECPG không biết cách đọc kèo bóng đá loại của cách đọc kèo bóng đá cột, để nó không thể kiểm tra xem một mảng C có được nhập vào Mảng cấp độ SQL tương ứng. Khi xử lý đầu ra của Một 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 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 phần tử Loại nên được sử dụng. Ví dụ: nếu một loại cột là mảng củaSố nguyên, một cách đọc kèo bóng đá chủ của loạiintcó thể được sử dụng. Ngoài ra nếu phần tử Loại làVarcharhoặcText, một cách đọc kèo bóng đá chủ của loạichar []hoặcVarchar []có thể đã 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ó vào 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 phần 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
Để ánh xạ nhiều phần tử mảng đến nhiều phần tử trong một loại máy chủ loại mảng biến từng phần tử của cột mảng và Mỗi phần tử của mảng cách đọc kèo bóng đá chủ phải được quản lý một cách riêng biệt, ví dụ:
EXEC cách đọc kèo bóng đá bắt đầu 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 đá khai báo con trỏ Cur1 cho chọn II [1], II [2], II [3], 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_a [0],: ii_a [1],: ii_a [2],: ii_a [3]; ...
Lưu ý lại rằng
EXEC cách đọc kèo bóng đá bắt đầu 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; ...
41396_41528
Một cách giải quyết khác là lưu trữ cách đọc kèo bóng đá mảng trong bên ngoài của họ Biểu diễn chuỗi trong cách đọc kèo bóng đá biến máy chủ của loạichar []hoặcVarchar []. Vì Thông tin 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à mảng không thể được truy cập một cách đọc kèo bóng đá tự nhiên dưới dạng một mảng trong chương trình máy chủ (không xử lý thêm phân tích cú pháp biểu diễn văn bản).
42168_42442
Đối với cách đọc 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 cách đọc 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ừ 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_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 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ữ giá trị trongFetchLệnh có thể tập hợp thành một cấu trúc. Để biết thêm chi tiết về máy chủ Biến 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 cách đọc 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ênFetchlệ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 trongFetchLệnh, tên thuộc tính trongChọnmệnh đề được chỉ định một bởi một. Điều này có thể được tăng cường bằng cách đọc kèo bóng đá sử dụng*Để yêu cầu tất cả cách đọc kèo bóng đá thuộc tính của tổng hợp Loại giá trị.
... 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 chính nó.
Cuối cùng, cũng có thể lưu trữ loại tổng hợp cách đọc kèo bóng đá giá trị trong biểu diễn chuỗi bên ngoài của chúng trong máy chủ cách đọc kèo bóng đá biến của loạichar []hoặcVarchar []. Nhưng theo cách đó, nó không dễ dàng có thể truy cập cách đọc kèo bóng đá trường của giá trị từ máy chủ chương trình.
cách đọc kèo bóng đá loại cơ sở do người dùng xác định mới không được hỗ trợ trực tiếp bởi ECPG. Bạn có thể sử dụng biểu diễn và máy chủ chuỗi bên ngoài cách đọc kèo bóng đá biến của loạichar []hoặcVarchar [], và giải pháp này thực sự là thích 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. Chuỗi bên ngoài
Đại diện của loại đó là(%lf,%lf), đượ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 35.11. Ví dụ sau đây
Chèn cách đọc kèo bóng đá giá trị loại phức(1,1)và(3,3)47070_47096AvàBvà chọn chúng từ bảng sau khi
cái đó.
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 cách đọc 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 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 chức năng hoặc Cast 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ý. Lưu ý, tuy nhiên, loại đó cách đọc kèo bóng đá diễn viên, đặc biệt là những người tiềm ẩn, nên được đưa vào hệ thống loại rất cẩn thận.
Ví dụ:
48230_48385
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)');
48978_49376Chỉ báovà chứa a 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 bị bỏ qua. Đây là một ví dụ Điều đó 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áoVal_indWill bằng không 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, nó có nghĩa là giá trị không phải là vô giá trị, nhưng nó là cắt ngắn khi nó được lưu trữ trong cách đọc 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 chỉ nội"50342_50592int_minchoint).