Bagikan melalui


SQLSTATE

SQLSTATEs memberikan informasi terperinci tentang penyebab peringatan atau kesalahan. SQLSTATEs dalam manual ini didasarkan pada yang ditemukan dalam spesifikasi ISO/IEF CLI, meskipun SQLSTATEs yang dimulai dengan IM 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 kali lipat:

  • 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 hanya bervariasi terlalu banyak. 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. Driver untuk mesin tersebut tidak mungkin memetakan semua kesalahan dan peringatan ini ke SQLSTATEs karena upaya yang terlibat, tidak adanya pemetaan, ukuran besar kode yang dihasilkan, dan nilai rendah dari kode yang dihasilkan, yang sering mengembalikan kesalahan pemrograman yang seharusnya tidak pernah ditemui pada waktu proses. Oleh karena itu, driver harus memetakan kesalahan dan peringatan sebanyak yang tampaknya masuk akal dan pastikan untuk memetakan kesalahan dan peringatan tersebut di mana logika aplikasi mungkin berbasis, 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, lebih mungkin dikembalikan dengan andal. Misalnya, sebagian besar driver mungkin mengembalikan SQLSTATE HYC00 (Fitur opsional tidak diterapkan), sementara lebih sedikit driver mungkin mengembalikan SQLSTATE 42021 (Kolom sudah ada).

SQLSTATEs berikut menunjukkan kesalahan run-time atau peringatan dan merupakan kandidat yang baik untuk mendasarkan 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 kedaluwarsa)

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.