Phần này mô tả cách bạn có thể xử lý các điều kiện và cảnh báo đặc biệt trong chương trình soi kèo bóng đá truoctran nhúng. Có hai cơ sở không có kết luận cho việc này.
bất cứ khi nào
lệnh.SQLCA
Biến.Một phương pháp đơn giản để bắt soi kèo bóng đá truoctran và cảnh báo là đặt một hành động cụ thể được thực thi bất cứ khi nào một điều kiện cụ thể xảy ra. Nói chung:
EXEC soi kèo bóng đá truoctran bất cứ khi nàođiều kiện
11849_11857
;
điều kiện
Có thể là soi kèo bóng đá truoctran trong những điều sau:
SQLERROR
Hành động được chỉ định được gọi bất cứ khi nào xảy ra soi kèo bóng đá truoctran trong quá trình thực hiện câu lệnh SQL.
sqlwarning
Hành động được chỉ định được gọi bất cứ khi nào cảnh báo xảy ra trong quá trình thực hiện câu lệnh soi kèo bóng đá truoctran.
Không tìm thấy
Hành động được chỉ định được gọi bất cứ khi nào một câu lệnh SQL truy xuất hoặc ảnh hưởng đến các hàng bằng không. (Điều kiện này không phải là soi kèo bóng đá truoctran, nhưng bạn có thể quan tâm đến việc xử lý nó đặc biệt.)
Hành động
có thể là soi kèo bóng đá truoctran trong những điều sau:
Tiếp tục
Điều này có nghĩa là điều kiện bị bỏ qua. Đây là mặc định.
Gotonhãn
đi đếnnhãn
Nhảy vào nhãn được chỉ định (sử dụng CGoto
câu lệnh).
SQLPrint
In một thông báo ra soi kèo bóng đá truoctran tiêu chuẩn. Điều này rất hữu ích cho các chương trình đơn giản hoặc trong quá trình tạo mẫu. Các chi tiết của thông báo không thể được cấu hình.
Dừng
gọiThoát (1)
, sẽ chấm dứt chương trình.
do break
Thực hiện câu lệnh CBreak
. Điều này chỉ nên được sử dụng trong các vòng hoặcSwitch
câu lệnh.
do tiếp tục
Thực hiện câu lệnh CTiếp tục
14432_14559
gọitên
(args
)
dotên
(args
)
Gọi các hàm C được chỉ định với các đối số được chỉ định. (Việc sử dụng này khác với ý nghĩa củagọi
vàdo
Trong ngữ pháp PostgreSQL bình thường.)
Tiêu chuẩn soi kèo bóng đá truoctran chỉ cung cấp cho các hành độngTiếp tục
vàGoto
(vàđi đến
).
Đây là một ví dụ mà bạn có thể muốn sử dụng trong một chương trình đơn giản. Nó in một thông báo đơn giản khi cảnh báo xảy ra và hủy bỏ chương trình khi xảy ra soi kèo bóng đá truoctran:
EXEC soi kèo bóng đá truoctran bất cứ khi nào sqlwarning sqlPrint; Exec soi kèo bóng đá truoctran bất cứ khi nào sqlerror dừng;
Câu lệnhEXEC soi kèo bóng đá truoctran bất cứ khi nào
là một chỉ thị của bộ tiền xử lý SQL, không phải là một tuyên bố C. Các hành động cảnh báo hoặc soi kèo bóng đá truoctran mà nó đặt ra áp dụng cho tất cả các câu lệnh SQL được nhúng xuất hiện bên dưới điểm đặt trình xử lý, trừ khi một hành động khác được đặt cho cùng một điều kiện giữa lần đầu tiênEXEC soi kèo bóng đá truoctran bất cứ khi nào
và câu lệnh soi kèo bóng đá truoctran gây ra điều kiện, bất kể dòng điều khiển trong chương trình C. Vì vậy, cả hai trong hai trích đoạn chương trình C sau đây sẽ có hiệu ứng mong muốn:
/* * SAI */ int main (int argc, char *argv []) ... if (verbose) Exec soi kèo bóng đá truoctran bất cứ khi nào sqlwarning sqlprint; ... EXEC soi kèo bóng đá truoctran CHỌN ...; ...
/* * SAI */ int main (int argc, char *argv []) ... set_error_handler (); ... EXEC soi kèo bóng đá truoctran CHỌN ...; ... tĩnh mạch set_error_handler (void) EXEC soi kèo bóng đá truoctran Bất cứ khi nào sqlerror dừng lại;
Để xử lý soi kèo bóng đá truoctran mạnh hơn, giao diện SQL được nhúng cung cấp một biến toàn cầu với tênSQLCA
(khu vực giao tiếp soi kèo bóng đá truoctran) có cấu trúc sau:
Cấu trúc char sqlcaid [8]; SQLABC dài; SQLCode dài; cấu trúc int sqlerrml; char sqlerrmc [sqlerrmc_len]; sqlerrm; char sqlerrp [8]; sqlerrd dài [6]; char sqlwarn [8]; char sqlstate [5]; sqlca;
(Trong soi kèo bóng đá truoctran chương trình đa luồng, mỗi luồng tự động có được bản sao của riêng mìnhSQLCA
. Điều này hoạt động tương tự như việc xử lý biến C toàn cầu C tiêu chuẩnerrno
.)
SQLCA
Bao gồm cả cảnh báo và soi kèo bóng đá truoctran. Nếu nhiều cảnh báo hoặc soi kèo bóng đá truoctran xảy ra trong quá trình thực hiện một câu lệnh, thìSQLCA
sẽ chỉ chứa thông tin về thông tin cuối cùng.
Nếu không có soi kèo bóng đá truoctran xảy ra trong lần cuốiPostgreSQL: Tài liệu:câu lệnh,sqlca.sqlcode
sẽ là 0 vàSQLCA.SQLSTATE
sẽ là"00000"
. Nếu cảnh báo hoặc soi kèo bóng đá truoctran xảy ra, thìsqlca.sqlcode
sẽ âm vàSQLCA.SQLSTATE
sẽ khác với"00000"
. soi kèo bóng đá truoctran tích cựcsqlca.sqlcode
18328_18411SQLCode
vàSQLSTATE
là hai sơ đồ mã soi kèo bóng đá truoctran khác nhau; Chi tiết xuất hiện bên dưới.
Nếu câu lệnh soi kèo bóng đá truoctran cuối cùng thành công, thìsqlca.sqlerrd [1]
Chứa OID của hàng đã xử lý, nếu có vàsqlca.sqlerrd [2]
Chứa số lượng hàng được xử lý hoặc trả lại, nếu có thể áp dụng cho lệnh.
Trong trường hợp có soi kèo bóng đá truoctran hoặc cảnh báo,sqlca.sqlerrm.sqlerrmc
18931_18992sqlca.sqlerrm.sqlerrml
chứa độ dài của thông báo soi kèo bóng đá truoctran được lưu trữ trongsqlca.sqlerrm.sqlerrmc
(kết quả củastrlen ()
, không thực sự thú vị cho soi kèo bóng đá truoctran lập trình viên C). Lưu ý rằng soi kèo bóng đá truoctran số tin nhắn quá dài để phù hợp với kích thước cố địnhSQLERRMC
mảng; Họ sẽ bị cắt ngắn.
Trong trường hợp cảnh báo,sqlca.sqlwarn [2]
được đặt thànhW
. (Trong tất cả các trường hợp khác, nó được đặt thành soi kèo bóng đá truoctran cái gì đó khác vớiW
.) Nếusqlca.sqlwarn [1]
được đặt thànhW
, thì soi kèo bóng đá truoctran giá trị đã bị cắt ngắn khi nó được lưu trữ trong soi kèo bóng đá truoctran biến máy chủ.sqlca.sqlwarn [0]
được đặt thànhW
Nếu bất kỳ yếu tố nào khác được đặt để chỉ ra cảnh báo.
Các trườngSQLCAID
, SQLABC
, sqlerrp
và các yếu tố còn lại củaSQLERRD
vàSQLWARN
Hiện không chứa thông tin hữu ích.
Cấu trúc20251_20258
không được xác định trong tiêu chuẩn SQL, nhưng được triển khai trong soi kèo bóng đá truoctran số hệ thống cơ sở dữ liệu SQL khác. Các định nghĩa tương tự như cốt lõi, nhưng nếu bạn muốn viết các ứng dụng di động, thì bạn nên điều tra các triển khai khác nhau soi kèo bóng đá truoctran cách cẩn thận.
Đây là soi kèo bóng đá truoctran ví dụ kết hợp việc sử dụngBất cứ khi nào
vàSQLCA
, In nội dung củaSQLCA
Khi xảy ra soi kèo bóng đá truoctran. Điều này có lẽ hữu ích cho các ứng dụng gỡ soi kèo bóng đá truoctran hoặc tạo mẫu, trước khi cài đặt thêmthân thiện với người dùngTrình xử lý soi kèo bóng đá truoctran.
20948_21898
Kết quả có thể trông như sau (ở đây là soi kèo bóng đá truoctran do tên bảng sai):
22019_22219
SQLSTATE
vs.22441_22450
Các trườngSQLCA.SQLSTATE
vàsqlca.sqlcode
là hai sơ đồ khác nhau cung cấp mã soi kèo bóng đá truoctran. Cả hai đều có nguồn gốc từ tiêu chuẩn SQL, nhưngSQLCode
đã được đánh dấu không dùng nữa trong phiên bản soi kèo bóng đá truoctran-92 của tiêu chuẩn và đã được bỏ trong các phiên bản sau. Do đó, các ứng dụng mới được khuyến khích sử dụngSQLSTATE
.
SQLSTATE
là một mảng năm ký tự. Năm ký tự chứa các chữ số hoặc các chữ cái trong trường hợp biểu diễn các mã của các điều kiện cảnh báo và soi kèo bóng đá truoctran khác nhau.SQLSTATE
Có sơ đồ phân cấp: Hai ký tự đầu tiên chỉ ra lớp chung của điều kiện, ba ký tự cuối cùng chỉ ra soi kèo bóng đá truoctran lớp con của điều kiện chung. Trạng thái thành công được biểu thị bằng mã00000
. TheSQLSTATE
Mã dành cho hầu hết các phần được xác định trong tiêu chuẩn soi kèo bóng đá truoctran. ThePostgreSQLMáy chủ tự nhiênSQLSTATE
Mã soi kèo bóng đá truoctran; Do đó, mức độ nhất quán cao có thể đạt được bằng cách sử dụng sơ đồ mã soi kèo bóng đá truoctran này trong tất cả các ứng dụng. Để biết thêm thông tin, xemPhụ lục A.
SQLCode
, Sơ đồ mã soi kèo bóng đá truoctran không dùng nữa, là một số nguyên đơn giản. Giá trị 0 biểu thị thành công, giá trị dương cho thấy thành công với thông tin bổ sung, giá trị âm cho biết soi kèo bóng đá truoctran. Tiêu chuẩn SQL chỉ xác định giá trị dương +100, chỉ ra rằng lệnh cuối cùng được trả về hoặc ảnh hưởng đến các hàng không và không có giá trị âm cụ thể nào. Do đó, chương trình này chỉ có thể đạt được tính di động kém và không có phân công mã phân cấp. Trong lịch sử, bộ xử lý SQL nhúng choPostgreSQLđã gán soi kèo bóng đá truoctran số cụ thểSQLCode
Giá trị cho việc sử dụng của nó, được liệt kê dưới đây với giá trị số và tên biểu tượng của chúng. Hãy nhớ rằng đây không phải là di động cho các triển khai soi kèo bóng đá truoctran khác. Để đơn giản hóa việc chuyển các ứng dụng sangSQLSTATE
Sơ đồ, tương ứngSQLSTATE
cũng được liệt kê. Tuy nhiên, không có bản đồ soi kèo bóng đá truoctran-soi kèo bóng đá truoctran hoặc soi kèo bóng đá truoctran-nhiều giữa hai sơ đồ (thực sự là nhiều-nhiều), vì vậy bạn nên tham khảo toàn cầuSQLSTATE
Liệt kê trongPhụ lục ATrong mỗi trường hợp.
Đây là những người được chỉ địnhSQLCode
Giá trị:
ECPG_NO_ERROR
)Cho biết không có soi kèo bóng đá truoctran. (SQLSTATE 00000)
ECPG_NOT_FOUND
)Đây là soi kèo bóng đá truoctran điều kiện vô hại chỉ ra rằng lệnh cuối cùng được truy xuất hoặc xử lý các hàng bằng không hoặc bạn đang ở cuối con trỏ. (SQLSTATE 02000)
Khi xử lý con trỏ trong vòng lặp, bạn có thể sử dụng mã này như soi kèo bóng đá truoctran cách để phát hiện khi nào để hủy bỏ vòng lặp, như thế này:
WHER (1) Exec soi kèo bóng đá truoctran tìm nạp ...; if (sqlca.sqlcode == ecpg_not_found) phá vỡ;
nhưngBất cứ khi nào không tìm thấy, hãy phá vỡ
Thực hiện hiệu quả điều này trong nội bộ, vì vậy thường không có lợi thế trong việc viết điều này soi kèo bóng đá truoctran cách rõ ràng.
ECPG_OUT_OF_MEMORY
)Cho biết bộ nhớ ảo của bạn đã cạn kiệt. Giá trị số được xác định là-enomem
. (Sqlstate ye001)
ECPG_UNSUPPORTED
)Cho biết bộ tiền xử lý đã tạo ra soi kèo bóng đá truoctran cái gì đó mà thư viện không biết. Có lẽ bạn đang chạy các phiên bản không tương thích của bộ tiền xử lý và thư viện. (Sqlstate ye002)
26936_26961
)Điều này có nghĩa là lệnh chỉ định nhiều biến máy chủ hơn lệnh dự kiến. (SQLSTATE 07001 hoặc 07002)
ECPG_TOO_FEW_ARGUMENT
27222_27225Điều này có nghĩa là lệnh chỉ định ít biến máy chủ hơn so với lệnh dự kiến. (SQLSTATE 07001 hoặc 07002)
ECPG_TOO_MANY_MATCHES
)Điều này có nghĩa là soi kèo bóng đá truoctran truy vấn đã trả về nhiều hàng nhưng câu lệnh chỉ được chuẩn bị để lưu trữ soi kèo bóng đá truoctran hàng kết quả (ví dụ: vì các biến được chỉ định không phải là mảng). (SQLSTATE 21000)
ECPG_INT_FORMAT
)Biến máy chủ thuộc loạiint
và mốc thời gian trong cơ sở dữ liệu thuộc loại khác và chứa soi kèo bóng đá truoctran giá trị không thể được hiểu làint
. Thư viện sử dụngstrtol ()
Đối với chuyển đổi này. (SQLSTATE 42804)
ECPG_UINT_FORMAT
)Biến máy chủ thuộc loạiunsign int
và mốc thời gian trong cơ sở dữ liệu thuộc loại khác và chứa soi kèo bóng đá truoctran giá trị không thể được hiểu làunsign int
. Thư viện sử dụngstrtoul ()
Đối với chuyển đổi này. (SQLSTATE 42804)
ECPG_FLOAT_FORMAT
)Biến máy chủ thuộc loạifloat
và mốc dữ liệu trong cơ sở dữ liệu thuộc loại khác và chứa soi kèo bóng đá truoctran giá trị không thể được hiểu làfloat
. Thư viện sử dụngstrtod ()
Đối với chuyển đổi này. (SQLSTATE 42804)
ECPG_NUMERIC_FORMAT
)Biến máy chủ thuộc loạiSố
và mốc thời gian trong cơ sở dữ liệu thuộc loại khác và chứa soi kèo bóng đá truoctran giá trị không thể được hiểu làSố
Giá trị. (SQLSTATE 42804)
ECPG_INTERVAL_FORMAT
)Biến máy chủ thuộc loạiKhoảng
và mốc dữ liệu trong cơ sở dữ liệu thuộc loại khác và chứa soi kèo bóng đá truoctran giá trị không thể được hiểu làKhoảng
Giá trị. (SQLSTATE 42804)
ECPG_DATE_FORMAT
)Biến máy chủ thuộc loạingày
và mốc dữ liệu trong cơ sở dữ liệu thuộc loại khác và chứa soi kèo bóng đá truoctran giá trị không thể được hiểu làngày
Giá trị. (SQLSTATE 42804)
ECPG_TIMESTAMP_FORMAT
)Biến máy chủ thuộc loạiDấu thời gian
và mốc dữ liệu trong cơ sở dữ liệu thuộc loại khác và chứa soi kèo bóng đá truoctran giá trị không thể được hiểu làDấu thời gian
Giá trị. (SQLSTATE 42804)
ECPG_CONVERT_BOOL
)Điều này có nghĩa là biến máy chủ thuộc loạibool
và mốc dữ liệu trong cơ sở dữ liệu không phải là'T'
cũng không'F'
. (SQLSTATE 42804)
ECPG_EMPTY
)Câu lệnh được gửi đếnPostgreSQLMáy chủ trống. (Điều này thường không thể xảy ra trong một chương trình SQL nhúng, vì vậy nó có thể chỉ ra một soi kèo bóng đá truoctran nội bộ.)
ECPG_MISSING_INDICATOR
)Giá trị null đã được trả về và không có biến chỉ báo null nào được cung cấp. (SQLSTATE 22002)
ECPG_NO_ARRAY
)soi kèo bóng đá truoctran biến thông thường đã được sử dụng ở soi kèo bóng đá truoctran nơi yêu cầu soi kèo bóng đá truoctran mảng. (SQLSTATE 42804)
ECPG_DATA_NOT_ARRAY
)Cơ sở dữ liệu đã trả về soi kèo bóng đá truoctran biến thông thường ở soi kèo bóng đá truoctran nơi yêu cầu giá trị mảng. (SQLSTATE 42804)
ECPG_ARRAY_INSERT
)Giá trị không thể được chèn vào mảng. (SQLSTATE 42804)
ECPG_NO_CONN
)Chương trình đã cố gắng truy cập soi kèo bóng đá truoctran kết nối không tồn tại. (SQLSTATE 08003)
ECPG_NOT_CONN
)Chương trình đã cố gắng truy cập một kết nối tồn tại nhưng không mở. (Đây là một soi kèo bóng đá truoctran nội bộ.) (SQLSTATE YE002)
ECPG_INVALID_STMT
)Câu lệnh bạn đang cố gắng sử dụng chưa được chuẩn bị. (SQLSTATE 26000)
ECPG_Informix_Duplicate_Key
)soi kèo bóng đá truoctran chính trùng lặp, vi phạm các ràng buộc duy nhất (chế độ tương thích thông tin). (SQLSTATE 23505)
ECPG_UNKNOWN_DESCRIPTOR
)33127_33244
ECPG_INVALID_DESCRIPTOR_INDEX
)Chỉ số mô tả được chỉ định nằm ngoài phạm vi. (SQLSTATE 07009)
ECPG_UNKNOWN_DESCRIPTOR_ITEM
)Một mục mô tả không hợp lệ đã được yêu cầu. (Đây là một soi kèo bóng đá truoctran nội bộ.) (SQLSTATE YE002)
ECPG_VAR_NOT_NUMERIC
)Trong quá trình thực hiện soi kèo bóng đá truoctran câu lệnh động, cơ sở dữ liệu đã trả về soi kèo bóng đá truoctran giá trị số và biến máy chủ không phải là số. (SQLSTATE 07006)
34058_34077
)Trong quá trình thực hiện soi kèo bóng đá truoctran câu lệnh động, cơ sở dữ liệu đã trả về soi kèo bóng đá truoctran giá trị không phải là số và biến máy chủ là số. (SQLSTATE 07006)
ECPG_INFORMIX_SUBSELECT_NOT_ONE
)Kết quả của trình điều khiển con không phải là soi kèo bóng đá truoctran hàng duy nhất (chế độ tương thích thông tin). (SQLSTATE 21000)
ECPG_PGSQL
)Một số soi kèo bóng đá truoctran gây ra bởiPostgreSQLMáy chủ. Thông báo chứa thông báo soi kèo bóng đá truoctran từPOSTGRESQLMáy chủ.
ECPG_TRANS
)ThePOSTGRESQLMáy chủ báo hiệu rằng chúng tôi không thể bắt đầu, cam kết hoặc cuộn lại giao dịch. (SQLSTATE 08007)
ECPG_CONNECT
)Kết nối cố gắng đến cơ sở dữ liệu không thành công. (SQLSTATE 08001)
ECPG_Duplicate_Key
)soi kèo bóng đá truoctran chính trùng lặp, vi phạm ràng buộc duy nhất. (SQLSTATE 23505)
ECPG_SUBSELECT_NOT_ONE
)Kết quả cho trình điều khiển con không phải là soi kèo bóng đá truoctran hàng duy nhất. (SQLSTATE 21000)
ECPG_WARNING_UNKNOWN_PORTAL
)Tên con trỏ không hợp lệ đã được chỉ định. (SQLSTATE 34000)
ecpg_warning_in_transaction
)Giao dịch đang được tiến hành. (SQLSTATE 25001)
ECPG_WARNING_NO_TRANSACTION
)Không có giao dịch hoạt động (đang tiến hành). (SQLSTATE 25P01)
ECPG_WARNING_PORTAL_EXISTS
)Tên con trỏ hiện có đã được chỉ định. (SQLSTATE 42P03)
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.