Fungsi SQLNativeSql

Kesesuaian
Versi Diperkenalkan: Kepatuhan Standar ODBC 1.0: ODBC

Summary
SQLNativeSql mengembalikan string SQL yang telah dimodifikasi oleh driver. SQLNativeSql tidak menjalankan pernyataan SQL.

Syntax

  
SQLRETURN SQLNativeSql(  
     SQLHDBC        ConnectionHandle,  
     SQLCHAR *      InStatementText,  
     SQLINTEGER     TextLength1,  
     SQLCHAR *      OutStatementText,  
     SQLINTEGER     BufferLength,  
     SQLINTEGER *   TextLength2Ptr);  

Arguments

ConnectionHandle
[Input] Handle koneksi.

InStatementText
[Input] String teks SQL yang akan diterjemahkan.

TextLength1
[Input] Panjang dalam karakter string teks *InStatementText .

OutStatementText
[Output] Penunjuk ke buffer untuk mengembalikan string SQL yang diterjemahkan.

Jika OutStatementText bernilai NULL, TextLength2Ptr tetap akan mengembalikan total jumlah karakter (tidak termasuk karakter null-terminasi untuk data karakter) yang tersedia untuk dikembalikan di buffer yang ditunjuk oleh OutStatementText.

BufferLength
[Input] Jumlah karakter dalam buffer *OutStatementText . Versi dokumentasi sebelumnya secara keliru menyiratkan bahwa jumlah karakter ini harus genap jika nilai yang dikembalikan dalam *InStatementText adalah string Unicode (saat memanggil SQLNativeSqlW). Tidak ada pembatasan seperti itu. Untuk interoperabilitas optimal, penulis driver harus mengharapkan jumlah karakter yang diteruskan ke fungsi ini, sementara penulis aplikasi disarankan untuk selalu menggunakan hitungan genap.

TextLength2Ptr
[Output] Penunjuk ke buffer untuk mengembalikan total jumlah karakter (tidak termasuk null-termination) yang tersedia untuk dikembalikan di *OutStatementText. Jika jumlah karakter yang tersedia untuk dikembalikan lebih besar atau sama dengan BufferLength, string SQL yang diterjemahkan dalam *OutStatementText dipotong menjadi BufferLength dikurangi panjang karakter null-terminasi.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, atau SQL_INVALID_HANDLE.

Diagnostics

Ketika SQLNativeSql mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE yang terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_DBC dan HandleConnectionHandle. Tabel berikut mencantumkan nilai SQLSTATE yang umum dikembalikan oleh SQLNativeSql dan menjelaskan masing-masing dalam konteks fungsi ini; notasi "(DM)" mendahului deskripsi SQLSTATE yang dikembalikan oleh Driver Manager. Kode pengembalian yang terkait dengan setiap nilai SQLSTATE SQL_ERROR, kecuali disebutkan sebaliknya.

SQLSTATE Kesalahan Description
01000 Peringatan umum Pesan informasi khusus driver. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01004 Data string, terpotong kanan Buffer *OutStatementText tidak cukup besar untuk mengembalikan seluruh string SQL, sehingga string SQL dipotong. Panjang string SQL yang tidak terpotong dikembalikan dalam *TextLength2Ptr. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
08003 Koneksi tidak terbuka ConnectionHandle tidak dalam keadaan terhubung.
08S01 Kegagalan tautan komunikasi Tautan komunikasi antara driver dan sumber data tempat driver tersambung gagal sebelum fungsi selesai diproses.
22007 Format tanggalwaktu tidak valid * InStatementText berisi klausa escape dengan nilai tanggal, waktu, atau cap waktu yang tidak valid.
24000 Status kursor tidak valid Kursor yang disebutkan dalam pernyataan diposisikan sebelum awal hasil atau setelah akhir hasil tersebut. Kesalahan ini mungkin tidak dikembalikan oleh driver yang memiliki implementasi kursor DBMS native.
HY000 Kesalahan umum Terjadi kesalahan yang tidak ada SQLSTATE tertentu dan tidak ada SQLSTATE khusus implementasi yang ditentukan. Pesan kesalahan yang dikembalikan oleh SQLGetDiagRec di buffer *MessageText menjelaskan kesalahan dan penyebabnya.
HY001 Kesalahan alokasi memori Driver tidak dapat mengalokasikan memori yang diperlukan untuk mendukung eksekusi atau penyelesaian fungsi.
HY009 Penggunaan pointer null tidak valid (DM) *InStatementText adalah null pointer.
HY010 Kesalahan urutan fungsi (DM) Fungsi yang dijalankan secara asinkron dipanggil untuk ConnectionHandle dan masih berjalan saat fungsi ini dipanggil.
HY013 Kesalahan manajemen memori Panggilan fungsi tidak dapat diproses karena objek memori yang mendasar tidak dapat diakses, mungkin karena kondisi memori yang rendah.
HY090 String atau panjang buffer tidak valid (DM) Argumen TextLength1 kurang dari 0, tetapi tidak sama dengan SQL_NTS.
(DM) Argumen BufferLength kurang dari 0 dan argumen OutStatementText bukan null pointer.
HY109 Posisi kursor tidak valid Baris kursor saat ini telah dihapus atau belum diambil. Kesalahan ini mungkin tidak dikembalikan oleh driver yang memiliki implementasi kursor DBMS native.
HY117 Koneksi ditangguhkan karena status transaksi yang tidak diketahui. Hanya fungsi putuskan sambungan dan baca-saja yang diizinkan. (DM) Untuk informasi selengkapnya tentang status ditangguhkan, lihat Fungsi SQLEndTran.
HYT01 Waktu tunggu koneksi habis Periode batas waktu koneksi kedaluwarsa sebelum sumber data merespons permintaan. Periode batas waktu koneksi diatur melalui SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Driver tidak mendukung fungsi ini (DM) Driver yang terkait dengan ConnectionHandle tidak mendukung fungsi tersebut.

Komentar

Berikut adalah contoh apa yang mungkin dikembalikan SQLNativeSql untuk string SQL input berikut yang berisi fungsi skalar CONVERT. Asumsikan bahwa empid kolom bertipe INTEGER dalam sumber data:

SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee  

Driver untuk Microsoft SQL Server mungkin mengembalikan string SQL terjemahan berikut:

SELECT convert (smallint, empid) FROM employee  

Driver untuk ORACLE Server mungkin mengembalikan string SQL terjemahan berikut:

SELECT to_number (empid) FROM employee  

Driver untuk Ingres mungkin mengembalikan string SQL terjemahan berikut:

SELECT int2 (empid) FROM employee  

Untuk informasi lebih lanjut, lihat Eksekusi Langsung dan Eksekusi Siap.

None.