Fungsi SQLGetDiagField
Kesesuaian
Versi Diperkenalkan: Kepatuhan Standar ODBC 3.0: ISO 92
Ringkasan
SQLGetDiagField mengembalikan nilai bidang rekaman struktur data diagnostik saat ini (terkait dengan handel tertentu) yang berisi informasi kesalahan, peringatan, dan status.
Sintaks
SQLRETURN SQLGetDiagField(
SQLSMALLINT HandleType,
SQLHANDLE Handle,
SQLSMALLINT RecNumber,
SQLSMALLINT DiagIdentifier,
SQLPOINTER DiagInfoPtr,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr);
Argumen
HandleType
[Input] Pengidentifikasi jenis handel yang menjelaskan jenis handel yang diagnostiknya diperlukan. Harus salah satu hal berikut:
SQL_HANDLE_DBC
SQL_HANDLE_DBC_INFO_TOKEN
SQL_HANDLE_DESC
SQL_HANDLE_ENV
SQL_HANDLE_STMT
SQL_HANDLE_DBC_INFO_TOKEN handel hanya digunakan oleh Driver Manager dan driver. Aplikasi tidak boleh menggunakan jenis handel ini. Untuk informasi selengkapnya tentang SQL_HANDLE_DBC_INFO_TOKEN, lihat Mengembangkan Kesadaran Kumpulan Koneksi di Driver ODBC.
Menangani
[Input] Handel untuk struktur data diagnostik, dari jenis yang ditunjukkan oleh HandleType. Jika HandleType SQL_HANDLE_ENV, Handle dapat berupa handel lingkungan bersama atau yang tidak dibagikan.
RecNumber
[Input] Menunjukkan rekaman status tempat aplikasi mencari informasi. Rekaman status diberi nomor dari 1. Jika argumen DiagIdentifier menunjukkan bidang header diagnostik apa pun, RecNumber diabaikan. Jika tidak, seharusnya lebih dari 0.
DiagIdentifier
[Input] Menunjukkan bidang diagnostik yang nilainya akan dikembalikan. Untuk informasi selengkapnya, lihat bagian "Argumen DiagIdentifier " di "Komentar."
DiagInfoPtr
[Output] Arahkan ke buffer untuk mengembalikan informasi diagnostik. Jenis data tergantung pada nilai DiagIdentifier. Jika DiagInfoPtr adalah jenis bilangan bulat, aplikasi harus menggunakan buffer SQLULEN dan menginisialisasi nilai ke 0 sebelum memanggil fungsi ini, karena beberapa driver hanya dapat menulis buffer 32-bit atau 16-bit yang lebih rendah dan membiarkan bit berurutan lebih tinggi tidak berubah.
Jika DiagInfoPtr adalah NULL, StringLengthPtr masih akan mengembalikan jumlah total byte (tidak termasuk karakter penghentian null untuk data karakter) yang tersedia untuk dikembalikan dalam buffer yang ditujukkan oleh DiagInfoPtr.
BufferLength
[Input] Jika DiagIdentifier adalah diagnostik yang ditentukan ODBC dan DiagInfoPtr menunjuk ke string karakter atau buffer biner, argumen ini harus panjang *DiagInfoPtr. Jika DiagIdentifier adalah bidang yang ditentukan ODBC dan *DiagInfoPtr adalah bilangan bulat, BufferLength diabaikan. Jika nilai dalam *DiagInfoPtr adalah string Unicode (saat memanggil SQLGetDiagFieldW), argumen BufferLength harus berupa angka genap.
Jika DiagIdentifier adalah bidang yang ditentukan driver, aplikasi menunjukkan sifat bidang ke Driver Manager dengan mengatur argumen BufferLength . BufferLength dapat memiliki nilai berikut:
Jika DiagInfoPtr adalah penunjuk ke string karakter, BufferLength adalah panjang string atau SQL_NTS.
Jika DiagInfoPtr adalah penunjuk ke buffer biner, aplikasi menempatkan hasil makro SQL_LEN_BINARY_ATTR(panjang) di BufferLength. Ini menempatkan nilai negatif di BufferLength.
Jika DiagInfoPtr adalah penunjuk ke nilai selain string karakter atau string biner, BufferLength harus memiliki nilai SQL_IS_POINTER.
Jika *DiagInfoPtr berisi jenis data dengan panjang tetap, BufferLength SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT, atau SQL_IS_USMALLINT, sebagaimana mewajibkan.
StringLengthPtr
[Output] Penunjuk ke buffer untuk mengembalikan jumlah total byte (tidak termasuk jumlah byte yang diperlukan untuk karakter penghentian null) yang tersedia untuk dikembalikan di *DiagInfoPtr, untuk data karakter. Jika jumlah byte yang tersedia untuk dikembalikan lebih besar dari atau sama dengan BufferLength, teks dalam *DiagInfoPtr dipotong menjadi BufferLength dikurangi panjang karakter penghentian null.
Kembali
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE, atau SQL_NO_DATA.
Diagnostik
SQLGetDiagField tidak memposting rekaman diagnostik untuk dirinya sendiri. Ini menggunakan nilai pengembalian berikut untuk melaporkan hasil eksekusinya sendiri:
SQL_SUCCESS: Fungsi berhasil mengembalikan informasi diagnostik.
SQL_SUCCESS_WITH_INFO: *DiagInfoPtr terlalu kecil untuk menahan bidang diagnostik yang diminta. Oleh karena itu, data di bidang diagnostik dipotong. Untuk menentukan bahwa pemotongan terjadi, aplikasi harus membandingkan BufferLength dengan jumlah byte aktual yang tersedia, yang ditulis ke *StringLengthPtr.
SQL_INVALID_HANDLE: Handel yang ditunjukkan oleh HandleType dan Handle bukan handel yang valid.
SQL_ERROR: Salah satu hal berikut ini terjadi:
Argumen DiagIdentifier bukan salah satu nilai yang valid.
Argumen DiagIdentifier SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE, atau SQL_DIAG_ROW_COUNT, tetapi Handle bukan handel pernyataan. (Manajer Driver mengembalikan diagnostik ini.)
Argumen RecNumber negatif atau 0 ketika DiagIdentifier menunjukkan bidang dari rekaman diagnostik. RecNumber diabaikan untuk bidang header.
Nilai yang diminta adalah string karakter dan BufferLength kurang dari nol.
Saat menggunakan pemberitahuan asinkron, operasi asinkron pada handel tidak selesai.
SQL_NO_DATA: RecNumber lebih besar dari jumlah rekaman diagnostik yang ada untuk handel yang ditentukan dalam Handel. Fungsi ini juga mengembalikan SQL_NO_DATA untuk RecNumber positif jika tidak ada rekaman diagnostik untuk Handle.
Komentar
Aplikasi biasanya memanggil SQLGetDiagField untuk mencapai salah satu dari tiga tujuan:
Untuk mendapatkan informasi kesalahan atau peringatan tertentu ketika panggilan fungsi telah mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO (atau SQL_NEED_DATA untuk fungsi SQLBrowseConnect ).
Untuk menentukan jumlah baris dalam sumber data yang terpengaruh saat menyisipkan, menghapus, atau memperbarui operasi dilakukan dengan panggilan ke SQLExecute, SQLExecDirect, SQLBulkOperations, atau SQLSetPos (dari bidang header SQL_DIAG_ROW_COUNT), atau untuk menentukan jumlah baris yang ada di kursor terbuka saat ini, jika driver dapat memberikan informasi ini (dari bidang header SQL_DIAG_CURSOR_ROW_COUNT).
Untuk menentukan fungsi mana yang dijalankan oleh panggilan ke SQLExecDirect atau SQLExecute (dari bidang header SQL_DIAG_DYNAMIC_FUNCTION dan SQL_DIAG_DYNAMIC_FUNCTION_CODE).
Setiap fungsi ODBC dapat memposting nol atau lebih rekaman diagnostik setiap kali dipanggil, sehingga aplikasi dapat memanggil SQLGetDiagField setelah panggilan fungsi ODBC. Tidak ada batasan jumlah rekaman diagnostik yang dapat disimpan kapan saja. SQLGetDiagField hanya mengambil informasi diagnostik yang terakhir dikaitkan dengan struktur data diagnostik yang ditentukan dalam argumen Handel . Jika aplikasi memanggil fungsi ODBC selain SQLGetDiagField atau SQLGetDiagRec, informasi diagnostik apa pun dari panggilan sebelumnya dengan handel yang sama akan hilang.
Aplikasi dapat memindai semua rekaman diagnostik dengan menaikkan RecNumber, selama SQLGetDiagField mengembalikan SQL_SUCCESS. Jumlah rekaman status ditunjukkan di bidang header SQL_DIAG_NUMBER. Panggilan ke SQLGetDiagField tidak merusak bidang header dan rekaman. Aplikasi dapat memanggil SQLGetDiagField lagi nanti untuk mengambil bidang dari rekaman, selama fungsi selain fungsi diagnostik belum dipanggil di sementara, yang akan memposting rekaman pada handel yang sama.
Aplikasi dapat memanggil SQLGetDiagField untuk mengembalikan bidang diagnostik apa pun kapan saja, kecuali untuk SQL_DIAG_CURSOR_ROW_COUNT atau SQL_DIAG_ROW_COUNT, yang akan mengembalikan SQL_ERROR jika Handle bukan handel pernyataan. Jika ada bidang diagnostik lain yang tidak terdefinisi, panggilan ke SQLGetDiagField akan mengembalikan SQL_SUCCESS (asalkan tidak ada diagnostik lain yang ditemui) dan nilai yang tidak terdefinisi dikembalikan untuk bidang tersebut.
Untuk informasi selengkapnya, lihat Menggunakan SQLGetDiagRec dan SQLGetDiagField dan Menerapkan SQLGetDiagRec dan SQLGetDiagField.
Memanggil API selain API yang sedang dijalankan secara asinkron akan menghasilkan HY010 "Kesalahan urutan fungsi". Namun, catatan kesalahan tidak dapat diambil sebelum operasi asinkron selesai.
Argumen HandleType
Setiap jenis handel dapat memiliki informasi diagnostik yang terkait dengannya. Argumen HandleType menunjukkan jenis handel Handel.
Beberapa bidang header dan rekaman tidak dapat dikembalikan untuk pegangan lingkungan, koneksi, pernyataan, dan deskriptor. Handel yang bidangnya tidak berlaku ditunjukkan di bagian "Bidang Header" dan "Bidang Rekaman" berikut ini.
Jika HandleType SQL_HANDLE_ENV, Handel dapat menjadi handel lingkungan bersama atau tidak dibagikan.
Tidak ada bidang diagnostik header khusus driver yang harus dikaitkan dengan handel lingkungan.
Satu-satunya bidang header diagnostik yang ditentukan untuk handel deskriptor adalah SQL_DIAG_NUMBER dan SQL_DIAG_RETURNCODE.
Argumen DiagIdentifier
Argumen ini menunjukkan pengidentifikasi bidang yang diperlukan dari struktur data diagnostik. Jika RecNumber lebih besar dari atau sama dengan 1, data di bidang menjelaskan informasi diagnostik yang dikembalikan oleh fungsi. Jika RecNumber adalah 0, bidang berada di header struktur data diagnostik dan oleh karena itu berisi data yang berkaitan dengan panggilan fungsi yang mengembalikan informasi diagnostik, bukan ke informasi tertentu.
Driver dapat menentukan bidang header dan rekaman khusus driver dalam struktur data diagnostik.
Aplikasi ODBC 3*.x* yang bekerja dengan driver ODBC 2*.x* akan dapat memanggil SQLGetDiagField hanya dengan argumen DiagIdentifier SQL_DIAG_CLASS_ORIGIN, SQL_DIAG_CLASS_SUBCLASS_ORIGIN, SQL_DIAG_CONNECTION_NAME, SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_NUMBER, SQL_DIAG_RETURNCODE, SQL_DIAG_SERVER_NAME, atau SQL_DIAG_SQLSTATE. Semua bidang diagnostik lainnya akan mengembalikan SQL_ERROR.
Bidang Header
Bidang header yang tercantum dalam tabel berikut ini dapat disertakan dalam argumen DiagIdentifier .
DiagIdentifier | Tipe hasil | Kembali |
---|---|---|
SQL_DIAG_CURSOR_ROW_COUNT | SQLLEN | Bidang ini berisi jumlah baris dalam kursor. Semantiknya bergantung pada jenis informasi SQLGetInfo SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2, dan SQL_STATIC_CURSOR_ATTRIBUTES2, yang menunjukkan jumlah baris mana yang tersedia untuk setiap jenis kursor (dalam bit SQL_CA2_CRC_EXACT dan SQL_CA2_CRC_APPROXIMATE). Konten bidang ini didefinisikan hanya untuk handel pernyataan dan hanya setelah SQLExecute, SQLExecDirect, atau SQLMoreResults telah dipanggil. Memanggil SQLGetDiagField dengan DiagIdentifier SQL_DIAG_CURSOR_ROW_COUNT selain handel pernyataan akan mengembalikan SQL_ERROR. |
SQL_DIAG_DYNAMIC_FUNCTION | SQLCHAR * | Ini adalah string yang menjelaskan pernyataan SQL bahwa fungsi yang mendasar dijalankan. (Lihat "Nilai bidang Fungsi Dinamis," nanti di bagian ini, untuk nilai tertentu.) Konten bidang ini ditentukan hanya untuk handel pernyataan dan hanya setelah panggilan ke SQLExecute, SQLExecDirect, atau SQLMoreResults. Memanggil SQLGetDiagField dengan DiagIdentifier SQL_DIAG_DYNAMIC_FUNCTION selain handel pernyataan akan mengembalikan SQL_ERROR. Nilai bidang ini tidak terdefinisi sebelum panggilan ke SQLExecute atau SQLExecDirect. |
SQL_DIAG_DYNAMIC_FUNCTION_CODE | SQLINTEGER | Ini adalah kode numerik yang menjelaskan pernyataan SQL yang dijalankan oleh fungsi yang mendasar. (Lihat "Nilai Bidang Fungsi Dinamis," nanti di bagian ini, untuk nilai tertentu.) Konten bidang ini ditentukan hanya untuk handel pernyataan dan hanya setelah panggilan ke SQLExecute, SQLExecDirect, atau SQLMoreResults. Memanggil SQLGetDiagField dengan DiagIdentifier SQL_DIAG_DYNAMIC_FUNCTION_CODE selain handel pernyataan akan mengembalikan SQL_ERROR. Nilai bidang ini tidak terdefinisi sebelum panggilan ke SQLExecute atau SQLExecDirect. |
SQL_DIAG_NUMBER | SQLINTEGER | Jumlah rekaman status yang tersedia untuk handel yang ditentukan. |
SQL_DIAG_RETURNCODE | SQLRETURN | Mengembalikan kode yang dikembalikan oleh fungsi . Untuk daftar kode pengembalian, lihat Mengembalikan Kode. Driver tidak harus menerapkan SQL_DIAG_RETURNCODE; selalu diimplementasikan oleh Driver Manager. Jika belum ada fungsi yang dipanggil pada Handle, SQL_SUCCESS akan dikembalikan untuk SQL_DIAG_RETURNCODE. |
SQL_DIAG_ROW_COUNT | SQLLEN | Jumlah baris yang terpengaruh oleh sisipan, hapus, atau pembaruan yang dilakukan oleh SQLExecute, SQLExecDirect, SQLBulkOperations, atau SQLSetPos. Ini ditentukan driver setelah spesifikasi kursor dijalankan. Isi bidang ini didefinisikan hanya untuk handel pernyataan. Memanggil SQLGetDiagField dengan DiagIdentifier SQL_DIAG_ROW_COUNT selain handel pernyataan akan mengembalikan SQL_ERROR. Data di bidang ini juga dikembalikan dalam argumen RowCountPtr dari SQLRowCount. Data di bidang ini diatur ulang setelah setiap panggilan fungsi nondiagnostik, sedangkan jumlah baris yang dikembalikan oleh SQLRowCount tetap sama sampai pernyataan diatur kembali ke status yang disiapkan atau dialokasikan. |
Bidang Rekaman
Bidang rekaman yang tercantum dalam tabel berikut ini bisa disertakan dalam argumen DiagIdentifier .
DiagIdentifier | Tipe hasil | Kembali |
---|---|---|
SQL_DIAG_CLASS_ORIGIN | SQLCHAR * | String yang menunjukkan dokumen yang menentukan bagian kelas dari nilai SQLSTATE dalam rekaman ini. Nilainya adalah "ISO 9075" untuk semua SQLSTATEs yang ditentukan oleh antarmuka tingkat panggilan Open Group dan ISO. Untuk SQLSTATEs khusus ODBC (semua yang kelas SQLSTATE-nya adalah "IM"), nilainya adalah "ODBC 3.0". |
SQL_DIAG_COLUMN_NUMBER | SQLINTEGER | Jika bidang SQL_DIAG_ROW_NUMBER adalah nomor baris yang valid dalam set baris atau sekumpulan parameter, bidang ini berisi nilai yang mewakili nomor kolom dalam tataan hasil atau nomor parameter dalam kumpulan parameter. Nomor kolom tataan hasil selalu dimulai pada 1; jika rekaman status ini berkaitan dengan kolom bookmark, bidang bisa nol. Nomor parameter dimulai dari 1. Ini memiliki nilai SQL_NO_COLUMN_NUMBER jika rekaman status tidak terkait dengan nomor kolom atau nomor parameter. Jika driver tidak dapat menentukan nomor kolom atau nomor parameter yang terkait dengan rekaman ini, bidang ini memiliki nilai SQL_COLUMN_NUMBER_UNKNOWN. Isi bidang ini didefinisikan hanya untuk handel pernyataan. |
SQL_DIAG_CONNECTION_NAME | SQLCHAR * | String yang menunjukkan nama koneksi yang terkait dengan rekaman diagnostik. Bidang ini ditentukan driver. Untuk struktur data diagnostik yang terkait dengan handel lingkungan dan untuk diagnostik yang tidak terkait dengan koneksi apa pun, bidang ini adalah string panjang nol. |
SQL_DIAG_MESSAGE_TEXT | SQLCHAR * | Pesan informasi tentang kesalahan atau peringatan. Bidang ini diformat seperti yang dijelaskan dalam Pesan Diagnostik. Tidak ada panjang maksimum untuk teks pesan diagnostik. |
SQL_DIAG_NATIVE | SQLINTEGER | Kode kesalahan asli khusus sumber driver/data. Jika tidak ada kode kesalahan asli, driver mengembalikan 0. |
SQL_DIAG_ROW_NUMBER | SQLLEN | Bidang ini berisi nomor baris dalam set baris, atau nomor parameter dalam kumpulan parameter, dengan rekaman status yang terkait. Nomor baris dan nomor parameter dimulai dengan 1. Bidang ini memiliki nilai SQL_NO_ROW_NUMBER jika rekaman status ini tidak terkait dengan nomor baris atau nomor parameter. Jika driver tidak dapat menentukan nomor baris atau nomor parameter yang terkait dengan rekaman ini, bidang ini memiliki nilai SQL_ROW_NUMBER_UNKNOWN. Isi bidang ini didefinisikan hanya untuk handel pernyataan. |
SQL_DIAG_SERVER_NAME | SQLCHAR * | String yang menunjukkan nama server yang terkait dengan catatan diagnostik. Ini sama dengan nilai yang dikembalikan untuk panggilan ke SQLGetInfo dengan opsi SQL_DATA_SOURCE_NAME. Untuk struktur data diagnostik yang terkait dengan handel lingkungan dan untuk diagnostik yang tidak terkait dengan server apa pun, bidang ini adalah string panjang nol. |
SQL_DIAG_SQLSTATE | SQLCHAR * | Kode diagnostik SQLSTATE lima karakter. Untuk informasi selengkapnya, lihat SQLSTATEs. |
SQL_DIAG_SUBCLASS_ORIGIN | SQLCHAR * | String dengan format dan nilai yang valid yang sama dengan SQL_DIAG_CLASS_ORIGIN, yang mengidentifikasi bagian yang menentukan bagian subkelas dari kode SQLSTATE. SQLSTATES khusus ODBC yang "ODBC 3.0" dikembalikan meliputi yang berikut ini: 01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY098, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012. |
Nilai Bidang Fungsi Dinamis
Tabel berikut menjelaskan nilai SQL_DIAG_DYNAMIC_FUNCTION dan SQL_DIAG_DYNAMIC_FUNCTION_CODE yang berlaku untuk setiap jenis pernyataan SQL yang dijalankan oleh panggilan ke SQLExecute atau SQLExecDirect. Driver dapat menambahkan nilai yang ditentukan driver ke yang tercantum.
Pernyataan SQL dieksekusi |
Nilai dari SQL_DIAG_DYNAMIC_FUNCTION |
Nilai dari SQL_DIAG_DYNAMIC_FUNCTION_CODE |
---|---|---|
alter-domain-statement | "UBAH DOMAIN" | SQL_DIAG_ALTER_DOMAIN |
alter-table-statement | "ALTER TABLE" | SQL_DIAG_ALTER_TABLE |
definisi pernyataan | "CREATE ASSERTION" | SQL_DIAG_CREATE_ASSERTION |
character-set-definition | "BUAT SET KARAKTER" | SQL_DIAG_CREATE_CHARACTER_SET |
definisi kolajek | "CREATE COLLATION" | SQL_DIAG_CREATE_COLLATION |
definisi domainn | "BUAT DOMAIN" | SQL_DIAG_CREATE_DOMAIN |
create-index-statement | "BUAT INDEKS" | SQL_DIAG_CREATE_INDEX |
create-table-statement | "CREATE TABLE" | SQL_DIAG_CREATE_TABLE |
create-view-statement | "BUAT TAMPILAN" | SQL_DIAG_CREATE_VIEW |
spesifikasi kursor | "PILIH KURSOR" | SQL_DIAG_SELECT_CURSOR |
delete-statement-positioned | "KURSOR PENGHAPUSAN DINAMIS" | SQL_DIAG_DYNAMIC_DELETE_CURSOR |
delete-statement-searched | "HAPUS DI MANA" | SQL_DIAG_DELETE_WHERE |
drop-assertion-statement | "HILANGKAN PERNYATAAN" | SQL_DIAG_DROP_ASSERTION |
drop-character-set-stmt | "HILANGKAN SET KARAKTER" | SQL_DIAG_DROP_CHARACTER_SET |
drop-collation-statement | "DROP COLLATION" | SQL_DIAG_DROP_COLLATION |
drop-domain-statement | "DROP DOMAIN" | SQL_DIAG_DROP_DOMAIN |
drop-index-statement | "HILANGKAN INDEKS" | SQL_DIAG_DROP_INDEX |
drop-schema-statement | "HILANGKAN SKEMA" | SQL_DIAG_DROP_SCHEMA |
drop-table-statement | "DROP TABLE" | SQL_DIAG_DROP_TABLE |
drop-translation-statement | "JATUHKAN TERJEMAHAN" | SQL_DIAG_DROP_TRANSLATION |
drop-view-statement | "DROP VIEW" | SQL_DIAG_DROP_VIEW |
grantstatement | "GRANT" | SQL_DIAG_GRANT |
insert-statement | "INSERT" | SQL_DIAG_INSERT |
Odbc-procedure-extension | "PANGGIL" | panggilan SQL_DIAG_ |
pernyataan pencabutan | "CABUT" | SQL_DIAG_REVOKE |
definisi skema | "CREATE SCHEMA" | SQL_DIAG_CREATE_SCHEMA |
definisi terjemahan | "BUAT TERJEMAHAN" | SQL_DIAG_CREATE_TRANSLATION |
update-statement-positioned | "KURSOR PEMBARUAN DINAMIS" | SQL_DIAG_DYNAMIC_UPDATE_CURSOR |
update-statement-searched | "PERBARUI DI MANA" | SQL_DIAG_UPDATE_WHERE |
Tidak dikenal | string kosong | SQL_DIAG_UNKNOWN_STATEMENT |
Urutan Rekaman Status
Rekaman status diposisikan dalam urutan berdasarkan nomor baris dan jenis diagnostik. Driver Manager menentukan urutan akhir untuk mengembalikan rekaman status yang dihasilkannya. Driver menentukan urutan akhir untuk mengembalikan rekaman status yang dihasilkannya.
Jika catatan diagnostik diposting oleh Driver Manager dan driver, Driver Manager bertanggung jawab untuk memesannya.
Jika ada dua rekaman status atau lebih, urutan rekaman ditentukan terlebih dahulu menurut nomor baris. Aturan berikut berlaku untuk menentukan urutan rekaman diagnostik menurut baris:
Rekaman yang tidak sesuai dengan baris apa pun muncul di depan rekaman yang sesuai dengan baris tertentu, karena SQL_NO_ROW_NUMBER didefinisikan menjadi -1.
Rekaman yang nomor barisnya tidak diketahui muncul di depan semua rekaman lainnya, karena SQL_ROW_NUMBER_UNKNOWN didefinisikan menjadi -2.
Untuk semua rekaman yang berkaitan dengan baris tertentu, rekaman diurutkan menurut nilai di bidang SQL_DIAG_ROW_NUMBER. Semua kesalahan dan peringatan baris pertama yang terpengaruh tercantum, lalu semua kesalahan dan peringatan baris berikutnya yang terpengaruh, dan sebagainya.
Catatan
Manajer Driver ODBC 3*.x* tidak memesan rekaman status dalam antrean diagnostik jika SQLSTATE 01S01 (Kesalahan berturut-turut) dikembalikan oleh driver ODBC 2*.x* atau jika SQLSTATE 01S01 (Kesalahan berturut-turut) dikembalikan oleh driver ODBC 3*.x* ketika SQLExtendedFetch dipanggil atau SQLSetPos dipanggil pada kursor yang telah diposisikan dengan SQLExtendedFetch.
Dalam setiap baris, atau untuk semua rekaman yang tidak sesuai dengan baris atau di mana nomor baris tidak diketahui, atau untuk semua rekaman tersebut dengan nomor baris sama dengan SQL_NO_ROW_NUMBER, rekaman pertama yang tercantum ditentukan dengan menggunakan sekumpulan aturan pengurutan. Setelah rekaman pertama, urutan rekaman lain yang memengaruhi baris tidak ditentukan. Aplikasi tidak dapat mengasumsikan bahwa kesalahan mendahului peringatan setelah rekaman pertama. Aplikasi harus memindai struktur data diagnostik lengkap untuk mendapatkan informasi lengkap tentang panggilan yang tidak berhasil ke fungsi.
Aturan berikut digunakan untuk menentukan rekaman pertama dalam baris. Rekor dengan peringkat tertinggi adalah rekor pertama. Sumber rekaman (Manajer Driver, driver, gateway, dan sebagainya) tidak dipertimbangkan saat memberi peringkat rekaman.
Rekaman Status Kesalahan yang menjelaskan kesalahan memiliki peringkat tertinggi. Aturan berikut diterapkan untuk mengurutkan kesalahan:
Catatan yang menunjukkan kegagalan transaksi atau kemungkinan kegagalan transaksi mengungguli semua catatan lainnya.
Jika dua rekaman atau lebih menjelaskan kondisi kesalahan yang sama, maka SQLSTATEs yang ditentukan oleh spesifikasi Open Group CLI (kelas 03 hingga HZ) mengungguli ODBC- dan SQLSTATEs yang ditentukan driver.
Catatan Status Tanpa Nilai Data yang ditentukan implementasi yang menjelaskan nilai Tanpa Data yang ditentukan driver (kelas 02) memiliki peringkat tertinggi kedua.
Catatan Status Peringatan yang menjelaskan peringatan (kelas 01) memiliki peringkat terendah. Jika dua catatan atau lebih menjelaskan kondisi peringatan yang sama, maka peringatan SQLSTATEs yang ditentukan oleh spesifikasi Open Group CLI mengungguli SQLSTATEs yang ditentukan ODBC dan yang ditentukan driver.
Fungsi Terkait
Untuk informasi tentang | Lihat |
---|---|
Mendapatkan beberapa bidang struktur data diagnostik | Fungsi SQLGetDiagRec |