Bagikan melalui


SQLSTATEs

SQLSTATEs memberikan informasi terperinci tentang penyebab peringatan atau kesalahan. Kode-kode SQLSTATE dalam manual ini didasarkan pada yang ditemukan dalam spesifikasi ISO/IEF CLI, meskipun kode-kode SQLSTATE yang dimulai dengan IM adalah khusus untuk ODBC.

Tidak seperti kode pengembalian, SQLSTATEs dalam manual ini adalah panduan, dan driver tidak diperlukan untuk mengembalikannya. Oleh karena itu, sementara driver harus mengembalikan SQLSTATE yang tepat untuk kesalahan atau peringatan yang mampu mereka deteksi, aplikasi tidak boleh mengandalkan ini selalu terjadi. Alasan untuk situasi ini adalah dua alasan utama:

  • Ketidaklengkapan Meskipun manual ini mencantumkan sejumlah besar kesalahan dan peringatan dan kemungkinan penyebab kesalahan dan peringatan tersebut, itu tidak lengkap dan mungkin tidak akan pernah; implementasi driver sangat bervariasi. Driver tertentu mungkin tidak akan mengembalikan semua SQLSTATEs yang tercantum dalam manual ini dan mungkin mengembalikan SQLSTATEs yang tidak tercantum dalam manual ini.

  • Kompleksitas Beberapa mesin database - terutama mesin database relasional - mengembalikan ribuan kesalahan dan peringatan secara harfiah. Driver untuk mesin tersebut tidak mungkin memetakan semua kesalahan dan peringatan ini ke SQLSTATEs karena usaha yang diperlukan, ketidakakuratan pemetaan, ukuran besar kode yang dihasilkan, dan rendahnya nilai kode yang dihasilkan, yang sering mengembalikan kesalahan pemrograman yang seharusnya tidak akan pernah terjadi saat waktu proses. Oleh karena itu, driver harus memetakan sebanyak mungkin kesalahan dan peringatan yang dianggap masuk akal dan pastikan untuk memetakan kesalahan dan peringatan tersebut yang mungkin menjadi dasar logika aplikasi, seperti SQLSTATE 01004 (Data terpotong).

Karena SQLSTATEs tidak dikembalikan dengan andal, sebagian besar aplikasi hanya menampilkannya kepada pengguna bersama dengan pesan diagnostik terkait mereka, yang sering disesuaikan dengan kesalahan atau peringatan tertentu yang terjadi, dan kode kesalahan asli. Jarang ada kehilangan fungsionalitas dalam melakukan ini, karena aplikasi tidak dapat mendasarkan logika pemrograman pada sebagian besar SQLSTATEs. Misalnya, SQLExecDirect mengembalikan SQLSTATE 42000 (Kesalahan sintaks atau pelanggaran akses). Jika pernyataan SQL yang menyebabkan kesalahan ini dikodekan secara permanen atau dibangun oleh aplikasi, ini adalah kesalahan pemrograman dan kode perlu diperbaiki. Jika pernyataan SQL dimasukkan oleh pengguna, ini adalah kesalahan pengguna dan aplikasi telah melakukan semua yang mungkin dengan memberi tahu pengguna tentang masalah tersebut.

Ketika aplikasi melakukan logika pemrograman dasar pada SQLSTATEs, aplikasi harus disiapkan agar SQLSTATE tidak dikembalikan atau agar SQLSTATE yang berbeda dikembalikan. Persis SQLSTATEs mana yang dikembalikan dengan andal hanya dapat didasarkan pada pengalaman dengan banyak driver. Namun, pedoman umum adalah bahwa SQLSTATEs untuk kesalahan yang terjadi di driver atau Manajer Driver, dibandingkan dengan sumber data, cenderung lebih bisa diandalkan untuk dikembalikan. Misalnya, sebagian besar driver mungkin mengembalikan SQLSTATE HYC00 (Fitur opsional tidak diterapkan), sementara lebih sedikit driver mungkin mengembalikan SQLSTATE 42021 (Kolom sudah ada).

SQLSTATEs yang dapat menunjukkan masalah saat aplikasi dijalankan, seperti kesalahan atau peringatan, dan dapat menjadi dasar yang baik bagi pengembangan logika pemrograman. Namun, tidak ada jaminan bahwa semua driver mengembalikannya.

  • 01004 (Data terpotong)

  • 01S02 (Nilai opsi berubah)

  • HY008 (Operasi dibatalkan)

  • HYC00 (Fitur opsional tidak diimplementasikan)

  • HYT00 (Waktu habis)

SQLSTATE HYC00 (Fitur opsional tidak diterapkan) sangat signifikan karena ini adalah satu-satunya cara di mana aplikasi dapat menentukan apakah driver mendukung pernyataan atau atribut koneksi tertentu.

Untuk daftar lengkap SQLSTATEs dan fungsi apa yang mengembalikannya, lihat Lampiran A: Kode Kesalahan ODBC. Untuk penjelasan terperinci tentang kondisi di mana setiap fungsi mungkin mengembalikan SQLSTATE tertentu, lihat fungsi tersebut.