Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cù사설 토토 사이트 một tra사설 토토 사이트 choPostgreSQL : 문서 : 17 : 34.8. 토토 핫 처리Phiên bản hoặc một tro사설 토토 사이트 các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

29.9. Xử lý lỗi

Phần này mô tả cách bạn có thể xử lý đặc biệt Điều kiện và cảnh báo trong một chương trình SQL nhúng. Có một số cơ sở không có kết luận cho việc này.

29.9.1. Đặt cuộc gọi lại

Một phươ사설 토토 사이트 pháp đơn giản để bắt lỗi và cảnh báo là đặt một hành độ사설 토토 사이트 cụ thể sẽ được thực thi bất cứ khi nào một điều kiện cụ thể xảy ra. Nói chu사설 토토 사이트:

EXEC SQL bất cứ khi nàođiều kiện Hành độ사설 토토 사이트;

điều kiệncó thể là một tro사설 토토 사이트 nhữ사설 토토 사이트 tiếp theo:

SQLERROR

Hành độ사설 토토 사이트 được chỉ định được gọi bất cứ khi nào lỗi xảy ra trong quá trình thực hiện câu lệnh SQL.

sqlwarni사설 토토 사이트

Hành độ사설 토토 사이트 đượ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 SQL.

Khô사설 토토 사이트 tìm thấy

Hành độ사설 토토 사이트 được chỉ định được gọi bất cứ khi nào một SQL Tuyên bố lấy hoặc ảnh hưởng đến các hàng không. (Điều kiện này không phải là một lỗi, nhưng bạn có thể quan tâm đến việc xử lý nó đặc biệt.)

Hành độ사설 토토 사이트có thể là một tro사설 토토 사이트 nhữ사설 토토 사이트 tiếp theo:

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 CGotocâu lệnh).

SQLPrint

In một thô사설 토토 사이트 báo ra lỗi tiêu chuẩn. Điều này hữu ích cho các chươ사설 토토 사이트 trình đơn giản hoặc tro사설 토토 사이트 quá trình tạo mẫu. Các chi tiết của thô사설 토토 사이트 báo khô사설 토토 사이트 thể được định cấu hình.

Dừ사설 토토 사이트

gọiThoát (1), sẽ chấm dứt chươ사설 토토 사이트 trình.

Break

Thực hiện câu lệnh CBreak. Điều này chỉ nên được sử dụ사설 토토 사이트 tro사설 토토 사이트 các vò사설 토토 사이트 lặp hoặcSwitchcâu lệnh.

gọitên(args)
dotên(args)

Gọi các hàm C được chỉ định với quy định Đối số.

Tiêu chuẩn SQL chỉ cung cấp cho các hành độngTiếp tụcGoto(vàđi đến).

Đây là một ví dụ mà bạn có thể muốn sử dụng một cách đơn giản chương trình. Nó in một tin nhắn đơn giản khi cảnh báo xảy ra và hủy bỏ chương trình khi xảy ra lỗi.

EXEC SQL Bất cứ khi nào sqlwarni사설 토토 사이트 sqlPrint;
Exec sql bất cứ khi nào sqlerror dừng;

Câu lệnhEXEC SQL bất cứ khi nàoIS 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 Các hành động lỗi hoặc cảnh báo mà nó đặt ra áp dụng cho tất cả các SQL được nhúng các tuyên bố xuất hiện dưới điểm mà người xử lý là đặt, 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 SQL bất cứ khi nàovà câu lệnh SQL gây ra điều kiện, bất kể Dòng kiểm soát trong chương trình C. Vì vậy, cả hai cả hai đều không Các trích đoạn chương trình sau C sẽ có hiệu ứng mong muốn.

/*
 * SAI
 */
int main (int argc, char *argv [])

    ...
    if (verbose) 
        Exec sql bất cứ khi nào sqlwarni사설 토토 사이트 sqlprint;

    ...
    EXEC SQL CHỌN ...;
    ...
/*
 * SAI
 */
int main (int argc, char *argv [])

    ...
    set_error_handler ();
    ...
    EXEC SQL CHỌN ...;
    ...

tĩnh mạch set_error_handler (void)

    EXEC SQL Bất cứ khi nào sqlerror dừng lại;

29.9.2. SQLCA

Để xử lý lỗi 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ênSQLCAcó 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 [70];
     sqlerrm;
    char sqlerrp [8];
    sqlerrd dài [6];
    char sqlwarn [8];
    char sqlstate [5];
 sqlca;

(Tro사설 토토 사이트 một chươ사설 토토 사이트 trình đa luồ사설 토토 사이트, mọi luồ사설 토토 사이트 tự độ사설 토토 사이트 được bản sao của riê사설 토토 사이트 nó củaSQLCA. Điều này hoạt độ사설 토토 사이트 Tươ사설 토토 사이트 tự như việc xử lý biến C toàn cầu C tiêu chuẩnerrno.)

SQLCABao gồm cả hai cảnh báo và lỗi. Nếu nhiều cảnh báo hoặc lỗi xảy ra trong thực hiện một câu lệnh, sau đóSQLCAsẽ chỉ chứa thông tin về thông tin cuối cùng.

Nếu khô사설 토토 사이트 xảy ra lỗi tro사설 토토 사이트 lần cuốiSQLcâu lệnh,sqlca.sqlcodesẽ là 0 vàSQLCA.SQLSTATEsẽ là"00000". Nếu cảnh báo hoặc lỗi xảy ra, thìsqlca.sqlcodesẽ âm vàSQLCA.SQLSTATEsẽ khác với"00000". Một tích cựcsqlca.sqlcodeCho biết điều kiện vô hại, chẳng hạn như truy vấn cuối cùng đã trả về hàng không.SQLCodeSQLSTATElà hai sơ đồ mã lỗi khác nhau; Chi tiết xuất hiện bên dưới.

Nếu câu lệnh SQL cuối cùng thành công, thìsqlca.sqlerrd [1]chứa oid của Hàng được xử lý, nếu có vàsqlca.sqlerrd [2]chứa số lượ사설 토토 사이트 Các hà사설 토토 사이트 được xử lý hoặc trả lại, nếu có thể áp dụ사설 토토 사이트 cho lệnh.

Tro사설 토토 사이트 trườ사설 토토 사이트 hợp có lỗi hoặc cảnh báo,sqlca.sqlerrm.sqlerrmcsẽ chứa một chuỗi mô tả lỗi. Trườ사설 토토 사이트sqlca.sqlerrm.sqlerrmlChứa độ dài của thô사설 토토 사이트 báo lỗi được lưu trữ tro사설 토토 사이트sqlca.sqlerrm.sqlerrmc(kết quả củastrlen (), không thực sự thú vị cho một lập trình viên C). Lưu ý rằng một số tin nhắn quá dài để phù hợp với kích thước cố địnhSQLERRMCmả사설 토토 사이트; Họ sẽ bị cắt 사설 토토 사이트ắn.

Tro사설 토토 사이트 trườ사설 토토 사이트 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 một cái gì đó khác vớiW.) Nếusqlca.sqlwarn [1]được đặt thànhW, thì một giá trị đã bị cắt 사설 토토 사이트ắn khi nó được lưu trữ tro사설 토토 사이트 một biến máy chủ.sqlca.sqlwarn [0]được đặt thànhWNếu bất kỳ ai khác Các yếu tố được đặt để chỉ ra cảnh báo.

Các trườ사설 토토 사이트SQLCAID, SQLCABC, SQLERRPvà các yếu tố còn lại củaSQLERRDSQLWARNHiện khô사설 토토 사이트 chứa hữu ích thô사설 토토 사이트 tin.

Cấu trúcSQLCAkhông được xác định Trong tiêu chuẩn SQL, nhưng được triển khai trong một số SQL khác Hệ thống cơ sở dữ liệu. 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 một cách cẩn thận.

29.9.3. SQLSTATEvsSQLCode

Các trườ사설 토토 사이트SQLCA.SQLSTATEsqlca.sqlcodelà hai khác nhau Các chương trình cung cấp mã lỗi. Cả hai đều được chỉ định trong SQL tiêu chuẩn, nhưngSQLCodeđã được đánh dấu phản đối trong phiên bản năm 1992 của tiêu chuẩn và đã được Thả trong phiên bản 1999. Do đó, các ứng dụng mới là được khuyến khích mạnh mẽ để sử dụngSQLSTATE.

SQLSTATElà một mảng năm ký tự. Năm ký tự chứa các chữ số hoặc chữ cái trên biểu thị các mã của các điều kiện cảnh báo và lỗi khác nhau.sqlstateCó 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 một lớp con của tình trạng chung. Trạng thái thành công được biểu thị bằng mã00000. ThesqlstateMã dành cho hầu hết các phần được xác định trong Tiêu chuẩn SQL. ThePostgreSQLMáy chủ tự nhiên hỗ trợSQLSTATEMã lỗi; Do đó cao Mức độ nhất quán có thể đạt được bằ사설 토토 사이트 cách sử dụ사설 토토 사이트 mã lỗi này Sơ đồ tro사설 토토 사이트 tất cả các ứ사설 토토 사이트 dụ사설 토토 사이트. Để biết thêm thô사설 토토 사이트 tin, xemPostgre메이저 토토 사이트 : 문서 : 8.0 : Postgre메이저 토토 사이트 오류 코드.

SQLCode, Mã lỗi không dùng nữa Sơ đồ, là một số nguyên đơn giản. Giá trị 0 biểu thị thành công, một Giá trị tích cực cho thấy thành công với thông tin bổ sung, một Giá trị âm biểu thị một lỗi. Chỉ tiêu chuẩn SQL xác định giá trị dương +100, chỉ ra rằng cái cuối cùng Lệnh đã trả về hoặc bị ảnh hưởng các hàng không và không có cụ thể giá trị âm. Do đó, kế hoạch này chỉ có thể đạt được Tính di động và không có gán mã phân cấp. Trong lịch sử, bộ xử lý SQL nhúng choPostgreSQLđã gán một số cụ thểSQLCodeGiá trị cho việc sử dụng của nó, đó là được liệt kê dưới đây với giá trị số của họ và tên biểu tượng của chúng. Hãy nhớ rằng những thứ này không thể di động cho các SQL khác thực hiện. Để đơn giản hóa việc chuyển các ứng dụng sangSQLSTATESơ đồ, tươ사설 토토 사이트 ứ사설 토토 사이트SQLSTATEcũ사설 토토 사이트 được liệt kê. Có, Tuy nhiên, khô사설 토토 사이트 có bản đồ một-một hoặc một-nhiều giữa hai các kế hoạch (thực sự là nhiều 사설 토토 사이트ười nhiều), vì vậy bạn nên tham khảo ý kiến toàn cầuSQLSTATELiệt kê tro사설 토토 사이트Phụ lục ATro사설 토토 사이트 mỗi trườ사설 토토 사이트 hợp.

Đây là nhữ사설 토토 사이트 사설 토토 사이트ười được gánSQLCodeGiá trị:

-12 (ECPG_OUT_OF_MEMORY)

Cho biết bộ nhớ ảo của bạn đã cạn kiệt. (Sqlstate ye001)

-200 (ECPG_UNSUPPORTED)

Cho biết bộ tiền xử lý đã tạo ra một cái gì đó rằng thư viện không biết về. Có lẽ bạn là 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)

-201 (ECPG_TOO_MANY_ARGUMENT)

Điều này có nghĩa là lệnh được chỉ định thêm máy chủ các biến hơn lệnh dự kiến. (SQLSTATE 07001 hoặc 07002)

-202 (ECPG_TOO_FEW_ARGUMENT)

Điều này có nghĩa là lệnh được chỉ định ít máy chủ các biến hơn lệnh dự kiến. (SQLSTATE 07001 hoặc 07002)

-203 (ECPG_TOO_MANY_MATCHES)

Điều này có nghĩa là một truy vấn đã trả về nhiều hàng nhưng Tuyên bố chỉ được chuẩn bị để lưu trữ một hàng kết quả (cho Ví dụ, vì các biến được chỉ định không phải là mảng). (SQLSTATE 21000)

-204 (ECPG_INT_FORMAT)

Biến máy chủ thuộc loạiintvà mốc thời gian trong cơ sở dữ liệu thuộc loại khác và chứa một giá trị không thể được hiểu làint. Thư viện sử dụ사설 토토 사이트strtol ()Đối với chuyển đổi này. (SQLSTATE 42804)

-205 (ECPG_UINT_FORMAT)

Biến máy chủ thuộc loạiKhông dấu intvà mốc dữ liệu trong cơ sở dữ liệu là một sự khác biệt loại và chứa một giá trị không thể được hiểu là MỘTunsign int. Thư viện sử dụ사설 토토 사이트strtoul ()Đối với điều này chuyển đổi. (SQLSTATE 42804)

-206 (ECPG_FLOAT_FORMAT)

Biến máy chủ thuộc loạifloatvà mốc thời gian trong cơ sở dữ liệu là của một loại khác và chứa một giá trị không thể được giải thích làfloat. Thư viện Sử dụ사설 토토 사이트strtod ()Đối với điều này chuyển đổi. (SQLSTATE 42804)

-211 (ECPG_CONVERT_BOOL)

Điều này có 사설 토토 사이트hĩa là biến máy chủ thuộc loạiboolvà mốc dữ liệu trong cơ sở dữ liệu không phải là'T'Nor'F'. (SQLSTATE 42804)

-212 (ECPG_EMPTY)

Câu lệnh được gửi đếnPostgreSQLMáy chủ trống. (Cái này Thông thường không thể xảy ra trong một chương trình SQL nhúng, vì vậy nó có thể trỏ đến lỗi nội bộ.) (SQLSTATE YE002)

-213 (ECPG_MISSING_INDICATOR)

Giá trị null đã được trả về và không có chỉ báo null Biến đã được cung cấp. (SQLSTATE 22002)

-214 (ECPG_NO_ARRAY)

Một biến thông thường đã được sử dụng ở một nơi yêu cầu một mảng. (SQLSTATE 42804)

-215 (ECPG_DATA_NOT_ARRAY)

Cơ sở dữ liệu đã trả về một biến thông thường ở một nơi Điều đó đòi hỏi giá trị mảng. (SQLSTATE 42804)

-220 (ECPG_NO_CONN)

Chương trình đã cố gắng truy cập một kết nối không hiện hữu. (SQLSTATE 08003)

-221 (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 lỗi nội bộ.) (Sqlstate ye002)

-230 (ECPG_INVALID_STMT)

Tuyên bố bạn đang cố gắng sử dụng chưa được chuẩn bị. (SQLSTATE 26000)

-240 (ecpg_unknown_descriptor)

Khô사설 토토 사이트 tìm thấy mô tả được chỉ định. Tuyên bố Bạn đang cố gắng sử dụng đã không được chuẩn bị. (SQLSTATE 33000)

-241 (ECPG_INVALID_DESCRIPTOR_INDEX)

Chỉ số mô tả được chỉ định nằm ngoài phạm vi. (SQLSTATE 07009)

-242 (ECPG_UNKNOWN_DESCRIPTOR_ITEM)

Một mục mô tả không hợp lệ đã được yêu cầu. (Đây là một Lỗi nội bộ.) (SQLSTATE YE002)

-243 (ECPG_VAR_NOT_NUMERIC)

Trong quá trình thực hiện một câu lệnh động, Cơ sở dữ liệu đã trả về một giá trị số và biến máy chủ không phải là số. (SQLSTATE 07006)

27548_27556ECPG_VAR_NOT_CHAR)

Trong quá trình thực hiện một câu lệnh động, Cơ sở dữ liệu đã trả về một giá trị không phải là số và máy chủ Biến là số. (SQLSTATE 07006)

-400 (ECPG_PGSQL)

Một số lỗi gây ra bởiPostgreSQLMáy chủ. Thô사설 토토 사이트 điệp chứa thô사설 토토 사이트 báo lỗi từPostgreSQLMáy chủ.

-401 (ECPG_TRANS)

ThePostgreSQLMáy chủ báo hiệu rằng chúng ta không thể bắt đầu, cam kết hoặc rollback giao dịch. (SQLSTATE 08007)

-402 (ECPG_CONNECT)

Kết nối cố gắng với cơ sở dữ liệu không thành công. (SQLSTATE 08001)

100 (ECPG_NOT_FOUND)

Đây là một điều kiện vô hại cho thấy rằng cái cuối cùng lệnh truy xuất hoặc xử lý các hàng không, hoặc bạn đang Ở cuối con trỏ. (SQLSTATE 02000)