Bagikan melalui


Fungsi SQLExecute

Kesesuaian
Versi diperkenalkan: Kepatuhan Standar ODBC 1.0: ISO 92

Ringkasan
SQLExecute menjalankan pernyataan yang disiapkan, menggunakan nilai variabel penanda parameter saat ini jika ada penanda parameter dalam pernyataan.

Sintaks

  
SQLRETURN SQLExecute(  
     SQLHSTMT     StatementHandle);  

Argumen

StatementHandle
[Input] Handel pernyataan.

Mengembalikan

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NEED_DATA, SQL_STILL_EXECUTING, SQL_ERROR, SQL_NO_DATA, SQL_INVALID_HANDLE, atau SQL_PARAM_DATA_AVAILABLE.

Diagnostik

Saat SQLExecute mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_STMT dan Handle of StatementHandle. Tabel berikut mencantumkan nilai SQLSTATE yang umumnya dikembalikan oleh SQLExecute dan menjelaskan masing-masing dalam konteks fungsi ini; notasi "(DM)" mendahului deskripsi SQLSTATEs yang dikembalikan oleh Driver Manager. Kode pengembalian yang terkait dengan setiap nilai SQLSTATE SQL_ERROR, kecuali disebutkan sebaliknya.

SQLSTATE Kesalahan Deskripsi
01000 Peringatan umum Pesan informasi khusus driver. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01001 Konflik operasi kursor Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi pernyataan pembaruan atau penghapusan yang diposisikan, dan tidak ada baris atau lebih dari satu baris yang diperbarui atau dihapus. (Untuk informasi selengkapnya tentang pembaruan ke lebih dari satu baris, lihat deskripsi SQL_ATTR_SIMULATE_CURSOR Atribut di SQLSetStmtAttr.)

(Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01003 Nilai NULL dihilangkan dalam fungsi yang ditetapkan Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi fungsi yang ditetapkan (seperti AVG, MAX, MIN, dan sebagainya), tetapi bukan fungsi kumpulan COUNT , dan nilai argumen NULL dihilangkan sebelum fungsi diterapkan. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01004 Data string, terpotong kanan String atau data biner yang dikembalikan untuk parameter output menghasilkan pemotongan karakter nonblank atau data biner non-NULL. Jika itu adalah nilai string, nilai tersebut dipotong kanan. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01006 Hak istimewa tidak dicabut Pernyataan yang disiapkan yang terkait dengan StatementHandle adalah pernyataan REVOKE , dan pengguna tidak memiliki hak istimewa yang ditentukan. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01007 Hak istimewa tidak diberikan Pernyataan yang disiapkan yang terkait dengan StatementHandle adalah pernyataan GRANT , dan pengguna tidak dapat diberikan hak istimewa yang ditentukan.
01S02 Nilai opsi berubah Atribut pernyataan tertentu tidak valid karena kondisi kerja implementasi, sehingga nilai serupa untuk sementara diganti. (SQLGetStmtAttr dapat dipanggil untuk menentukan nilai yang diganti sementara.) Nilai pengganti valid untuk StatementHandle hingga kursor ditutup, di mana atribut pernyataan kembali ke nilai sebelumnya. Atribut pernyataan yang dapat diubah adalah: SQL_ATTR_CONCURRENCY, SQL_ATTR_CURSOR_TYPE, SQL_ATTR_KEYSET_SIZE, SQL_ATTR_MAX_LENGTH, SQL_ATTR_MAX_ROWS, SQL_ATTR_QUERY_TIMEOUT, dan SQL_ATTR_SIMULATE_CURSOR. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
01S07 Pemotongan pecahan Data yang dikembalikan untuk parameter input/output atau output dipotong sedih sehingga bagian pecahan dari jenis data numerik dipotong atau bagian pecahan dari komponen waktu dari jenis data waktu, tanda waktu, atau interval dipotong.

(Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
07002 Bidang COUNT salah Jumlah parameter yang ditentukan dalam SQLBindParameter kurang dari jumlah parameter dalam pernyataan SQL yang terkandung dalam *StatementText.

SQLBindParameter dipanggil dengan ParameterValuePtr diatur ke pointer null, StrLen_or_IndPtr tidak diatur ke SQL_NULL_DATA atau SQL_DATA_AT_EXEC, dan InputOutputType tidak diatur ke SQL_PARAM_OUTPUT, sehingga jumlah parameter yang ditentukan dalam SQLBindParameter lebih besar dari jumlah parameter dalam pernyataan SQL yang terkandung dalam *StatementText.
07006 Pelanggaran atribut jenis data terbatas Nilai data yang diidentifikasi oleh argumen ValueType di SQLBindParameter untuk parameter terikat tidak dapat dikonversi ke jenis data yang diidentifikasi oleh argumen ParameterType di SQLBindParameter.

Nilai data yang dikembalikan untuk parameter yang terikat sebagai SQL_PARAM_INPUT_OUTPUT atau SQL_PARAM_OUTPUT tidak dapat dikonversi ke jenis data yang diidentifikasi oleh argumen ValueType di SQLBindParameter.

(Jika nilai data untuk satu atau beberapa baris tidak dapat dikonversi tetapi satu atau beberapa baris berhasil dikembalikan, fungsi ini mengembalikan SQL_SUCCESS_WITH_INFO.)
07007 Pelanggaran nilai parameter terbatas Jenis parameter SQL_PARAM_INPUT_OUTPUT_STREAM hanya digunakan untuk parameter yang mengirim dan menerima data dalam beberapa bagian. Buffer terikat input tidak diperbolehkan untuk jenis parameter ini.

Kesalahan ini akan terjadi ketika jenis parameter SQL_PARAM_INPUT_OUTPUT, dan ketika *StrLen_or_IndPtr yang ditentukan dalam SQLBindParameter tidak sama dengan SQL_NULL_DATA, SQL_DEFAULT_PARAM, SQL_LEN_DATA_AT_EXEC(len), atau SQL_DATA_AT_EXEC.
07S01 Penggunaan parameter default tidak valid Nilai parameter, yang diatur dengan SQLBindParameter, SQL_DEFAULT_PARAM, dan parameter yang sesuai bukan parameter untuk pemanggilan prosedur kanonis ODBC.
08S01 Kegagalan tautan komunikasi Tautan komunikasi antara driver dan sumber data tempat driver tersambung gagal sebelum fungsi selesai diproses.
21S02 Tingkat tabel turunan tidak cocok dengan daftar kolom Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi pernyataan CREATE VIEW , dan daftar kolom yang tidak memenuhi syarat (jumlah kolom yang ditentukan untuk tampilan dalam argumen pengidentifikasi kolom pernyataan SQL) berisi lebih banyak nama daripada jumlah kolom dalam tabel turunan yang ditentukan oleh argumen spesifikasi kueri dari pernyataan SQL.
22001 Data string, pemotongan kanan Penetapan karakter atau nilai biner ke kolom menghasilkan pemotongan karakter atau byte nonblank (karakter) atau non-null (biner).
22002 Variabel indikator diperlukan tetapi tidak disediakan Data NULL terikat ke parameter output yang StrLen_or_IndPtr diatur oleh SQLBindParameter adalah penunjuk null.
22003 Nilai numerik di luar rentang Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi parameter numerik terikat, dan nilai parameter menyebabkan seluruh (dibandingkan dengan pecahan) bagian dari angka yang akan dipotong saat ditetapkan ke kolom tabel terkait.

Mengembalikan nilai numerik (sebagai numerik atau string) untuk satu atau beberapa parameter input/output atau output akan menyebabkan seluruh (dibandingkan dengan pecahan) bagian dari angka yang akan dipotong.
22007 Format tanggalwaktu tidak valid Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi pernyataan SQL yang berisi struktur tanggal, waktu, atau tanda waktu sebagai parameter terikat, dan parameter masing-masing, tanggal, waktu, atau tanda waktu yang tidak valid.

Parameter input/output atau output terikat ke struktur C tanggal, waktu, atau tanda waktu, dan nilai dalam parameter yang dikembalikan masing-masing, tanggal, waktu, atau tanda waktu yang tidak valid. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.)
22008 Meluapnya bidang tanggalwaktu Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi pernyataan SQL yang berisi ekspresi tanggalwaktu yang, ketika dihitung, menghasilkan struktur tanggal, waktu, atau tanda waktu yang tidak valid.

Ekspresi tanggalwaktu yang dihitung untuk parameter input/output atau output menghasilkan struktur C tanggal, waktu, atau tanda waktu yang tidak valid.
22012 Pembagian dengan nol Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi ekspresi aritmatika yang menyebabkan pembagian nol.

Ekspresi aritmatika yang dihitung untuk parameter input/output atau output menghasilkan pembagian dengan nol.
22015 Meluapnya bidang interval *StatementText berisi parameter numerik atau interval yang tepat yang, ketika dikonversi ke jenis data SQL interval, menyebabkan hilangnya digit signifikan.

*StatementText berisi parameter interval dengan lebih dari satu bidang yang, ketika dikonversi ke jenis data numerik dalam kolom, tidak memiliki representasi dalam jenis data numerik.

*StatementText berisi data parameter yang ditetapkan ke jenis SQL interval, dan tidak ada representasi nilai jenis C dalam jenis SQL interval.

Menetapkan parameter input/output atau output yang merupakan jenis SQL numerik atau interval yang tepat ke jenis C interval menyebabkan hilangnya digit signifikan.

Ketika parameter input/output atau output ditetapkan ke struktur interval C, tidak ada representasi data dalam struktur data interval.
22018 Nilai karakter tidak valid untuk spesifikasi cast *StatementText berisi tipe C yang tepat atau perkiraan numerik, tanggalwaktu, atau tipe data interval; jenis SQL kolom adalah tipe data karakter; dan nilai dalam kolom bukan harfiah yang valid dari jenis C terikat.

Ketika parameter input/output atau output dikembalikan, jenis SQL adalah jenis data numerik yang tepat atau perkiraan, tanggalwaktu, atau interval; jenis C SQL_C_CHAR; dan nilai dalam kolom bukan harfiah yang valid dari jenis SQL terikat.
22019 Karakter escape tidak valid Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi predikat LIKE dengan ESCAPE dalam klausa WHERE, dan panjang karakter escape setelah ESCAPE tidak sama dengan 1.
22025 Urutan escape tidak valid Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi "KARAKTER ESCAPE nilai pola LIKE" dalam klausa WHERE, dan karakter yang mengikuti karakter escape dalam nilai pola bukan salah satu dari "%" atau "_".
23000 Pelanggaran batasan integritas Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi parameter. Nilai parameter adalah NULL untuk kolom yang didefinisikan sebagai NOT NULL di kolom tabel terkait, nilai duplikat disediakan untuk kolom yang dibatasi hanya berisi nilai unik, atau beberapa batasan integritas lainnya dilanggar.
24000 Status kursor tidak valid Kursor diposisikan pada StatementHandle oleh SQLFetch atau SQLFetchScroll. Kesalahan ini dikembalikan oleh Driver Manager jika SQLFetch atau SQLFetchScroll belum mengembalikan SQL_NO_DATA, dan dikembalikan oleh driver jika SQLFetch atau SQLFetchScroll telah mengembalikan SQL_NO_DATA.

Kursor terbuka pada StatementHandle.

Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi pernyataan pembaruan atau penghapusan yang diposisikan, dan kursor diposisikan sebelum awal kumpulan hasil atau setelah akhir tataan hasil.
40001 Kegagalan serialisasi Transaksi digulung balik karena kebuntuan sumber daya dengan transaksi lain.
40003 Penyelesaian pernyataan tidak diketahui Koneksi terkait gagal selama eksekusi fungsi ini, dan status transaksi tidak dapat ditentukan.
42000 Kesalahan sintaks atau pelanggaran akses Pengguna tidak memiliki izin untuk menjalankan pernyataan yang disiapkan yang terkait dengan StatementHandle.
44000 DENGAN PELANGGARAN OPSI PEMERIKSAAN Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi pernyataan INSERT yang dilakukan pada tabel yang dilihat atau tabel yang berasal dari tabel yang dilihat yang dibuat dengan menentukan WITH CHECK OPTION, sehingga satu atau beberapa baris yang terpengaruh oleh pernyataan INSERT tidak akan ada lagi dalam tabel yang dilihat.

Pernyataan yang disiapkan yang terkait dengan StatementHandle berisi pernyataan UPDATE yang dilakukan pada tabel yang dilihat atau tabel yang berasal dari tabel yang dilihat yang dibuat dengan menentukan WITH CHECK OPTION, sehingga satu atau beberapa baris yang terpengaruh oleh pernyataan UPDATE tidak akan ada lagi dalam tabel yang dilihat.
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.
HY008 Operasi dibatalkan Pemrosesan asinkron diaktifkan untuk StatementHandle. Fungsi ini dipanggil, dan sebelum selesai dieksekusi, SQLCancel atau SQLCancelHandle dipanggil pada StatementHandle. Kemudian fungsi dipanggil lagi pada StatementHandle.

Fungsi ini dipanggil, dan sebelum selesai dieksekusi, SQLCancel atau SQLCancelHandle dipanggil pada StatementHandle dari utas yang berbeda dalam aplikasi multithread.
HY010 Kesalahan urutan fungsi (DM) Fungsi eksekusi asinkron dipanggil untuk handel koneksi yang terkait dengan StatementHandle. Fungsi asinkron ini masih dijalankan ketika fungsi SQLExecute dipanggil.

(DM) SQLExecute, SQLExecDirect, atau SQLMoreResults dipanggil untuk StatementHandle dan dikembalikan SQL_PARAM_DATA_AVAILABLE. Fungsi ini dipanggil sebelum data diambil untuk semua parameter yang dialirkan.

(DM) Fungsi eksekusi asinkron (bukan yang ini) dipanggil untuk StatementHandle dan masih dijalankan ketika fungsi ini dipanggil.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations, atau SQLSetPos dipanggil untuk StatementHandle dan dikembalikan SQL_NEED_DATA. Fungsi ini dipanggil sebelum data dikirim untuk semua parameter atau kolom data-at-execution.

(DM) StatementHandle tidak disiapkan.
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 Nilai parameter, yang diatur dengan SQLBindParameter, adalah pointer null, dan nilai panjang parameter bukan 0, SQL_NULL_DATA, SQL_DATA_AT_EXEC, SQL_DEFAULT_PARAM, atau kurang dari atau sama dengan SQL_LEN_DATA_AT_EXEC_OFFSET.

Nilai parameter, yang diatur dengan SQLBindParameter, bukan penunjuk null; jenis data C SQL_C_BINARY atau SQL_C_CHAR; dan nilai panjang parameter kurang dari 0 tetapi tidak SQL_NTS, SQL_NULL_DATA, SQL_DEFAULT_PARAM, atau SQL_DATA_AT_EXEC, atau kurang dari atau sama dengan SQL_LEN_DATA_AT_EXEC_OFFSET.

Nilai panjang parameter yang terikat oleh SQLBindParameter diatur ke SQL_DATA_AT_EXEC; jenis SQL SQL_LONGVARCHAR, SQL_LONGVARBINARY, atau jenis data khusus sumber data yang panjang; dan jenis informasi SQL_NEED_LONG_DATA_LEN di SQLGetInfo adalah "Y".
HY105 Jenis parameter tidak valid Nilai yang ditentukan untuk argumen InputOutputType di SQLBindParameter SQL_PARAM_OUTPUT, dan parameternya adalah parameter input.
HY109 Posisi kursor tidak valid Pernyataan yang disiapkan adalah pernyataan pembaruan atau penghapusan yang diposisikan, dan kursor diposisikan (oleh SQLSetPos atau SQLFetchScroll) pada baris yang telah dihapus atau tidak dapat diambil.
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.
HYC00 Fitur opsional tidak diimplementasikan Kombinasi pengaturan saat ini dari atribut pernyataan SQL_ATTR_CONCURRENCY dan SQL_ATTR_CURSOR_TYPE tidak didukung oleh driver atau sumber data.

Atribut pernyataan SQL_ATTR_USE_BOOKMARKS diatur ke SQL_UB_VARIABLE, dan atribut pernyataan SQL_ATTR_CURSOR_TYPE diatur ke jenis kursor yang drivernya tidak mendukung marka buku.
HYT00 Waktu habis kedaluwarsa Periode batas waktu kueri kedaluwarsa sebelum sumber data mengembalikan tataan hasil. Periode batas waktu diatur melalui SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Kesalahan waktu habis koneksi kedaluwarsa 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 StatementHandle tidak mendukung fungsi.
IM017 Polling dinonaktifkan dalam mode pemberitahuan asinkron Setiap kali model pemberitahuan digunakan, polling dinonaktifkan.
IM018 SQLCompleteAsync belum dipanggil untuk menyelesaikan operasi asinkron sebelumnya pada handel ini. Jika panggilan fungsi sebelumnya pada handel mengembalikan SQL_STILL_EXECUTING dan jika mode pemberitahuan diaktifkan, SQLCompleteAsync harus dipanggil pada handel untuk melakukan pasca-pemrosesan dan menyelesaikan operasi.

SQLExecute dapat mengembalikan SQLSTATE apa pun yang dapat dikembalikan oleh SQLPrepare, berdasarkan kapan sumber data mengevaluasi pernyataan SQL yang terkait dengan pernyataan.

Komentar

SQLExecute menjalankan pernyataan yang disiapkan oleh SQLPrepare. Setelah aplikasi memproses atau membuang hasil dari panggilan ke SQLExecute, aplikasi dapat memanggil SQLExecute lagi dengan nilai parameter baru. Untuk informasi selengkapnya tentang eksekusi yang disiapkan, lihat Eksekusi yang Disiapkan.

Untuk menjalankan pernyataan SELECT lebih dari sekali, aplikasi harus memanggil SQLCloseCursor sebelum mengeksekusi ulang pernyataan SELECT .

Jika sumber data dalam mode penerapan manual (memerlukan inisiasi transaksi eksplisit) dan transaksi belum dimulai, driver memulai transaksi sebelum mengirim pernyataan SQL. Untuk mengetahui informasi selengkapnya, lihat Transformasi.

Jika aplikasi menggunakan SQLPrepare untuk mempersiapkan dan SQLExecute untuk mengirimkan pernyataan COMMIT atau ROLLBACK , itu tidak akan dapat dioperasikan antara produk DBMS. Untuk menerapkan atau mengembalikan transaksi, hubungi SQLEndTran.

Jika SQLExecute menemukan parameter data-at-execution, SQLExecute mengembalikan SQL_NEED_DATA. Aplikasi mengirimkan data menggunakan SQLParamData dan SQLPutData. Lihat SQLBindParameter, SQLParamData, SQLPutData, dan Mengirim Data Panjang.

Jika SQLExecute menjalankan pernyataan pembaruan, sisipkan, atau hapus yang dicari yang tidak memengaruhi baris apa pun di sumber data, panggilan ke SQLExecute akan mengembalikan SQL_NO_DATA.

Jika nilai atribut pernyataan SQL_ATTR_PARAMSET_SIZE lebih besar dari 1 dan pernyataan SQL berisi setidaknya satu penanda parameter, SQLExecute menjalankan pernyataan SQL sekali untuk setiap set nilai parameter dalam array yang diarahkan oleh argumen *ParameterValuePtr dalam panggilan ke SQLBindParameter. Untuk informasi selengkapnya, lihat Array Nilai Parameter.

Jika marka buku diaktifkan dan kueri dijalankan yang tidak dapat mendukung marka buku, driver harus mencoba memaksa lingkungan ke yang mendukung marka buku dengan mengubah nilai atribut dan mengembalikan SQLSTATE 01S02 (Nilai opsi berubah). Jika atribut tidak dapat diubah, driver harus mengembalikan SQLSTATE HY024 (nilai atribut tidak valid).

Catatan

Saat menggunakan pengumpulan koneksi, aplikasi tidak boleh menjalankan pernyataan SQL yang mengubah database atau konteks database, seperti pernyataan database USE di SQL Server, yang mengubah katalog yang digunakan oleh sumber data.

Contoh Kode

Lihat SQLBindParameter, SQLBulkOperations, SQLPutData, dan SQLSetPos.

Untuk informasi tentang Lihat
Mengikat buffer ke kolom dalam tataan hasil Fungsi SQLBindCol
Membatalkan pemrosesan pernyataan Fungsi SQLCancel
Menutup kursor Fungsi SQLCloseCursor
Menjalankan operasi penerapan atau pembatalan Fungsi SQLEndtran
Menjalankan pernyataan SQL Fungsi SQLExecDirect
Mengambil beberapa baris data Fungsi SQLFetch
Mengambil blok data atau menggulir melalui kumpulan hasil Fungsi SQLFetchScroll
Membebaskan handel pernyataan Fungsi SQLFreeStmt
Mengembalikan nama kursor Fungsi SQLGetCursorName
Mengambil bagian atau semua kolom data Fungsi SQLGetData
Mengembalikan parameter berikutnya untuk mengirim data Fungsi SQLParamData
Menyiapkan pernyataan untuk eksekusi Fungsi SQLPrepare
Mengirim data parameter pada waktu eksekusi Fungsi SQLPutData
Mengatur nama kursor Fungsi SQLSetCursorName
Mengatur atribut pernyataan Fungsi SQLSetStmtAttr

Lihat Juga

Referensi API ODBC
File Header ODBC