Fungsi SQLGetTypeInfo
Kesesuaian
Versi diperkenalkan: Kepatuhan Standar ODBC 1.0: ISO 92
Ringkasan
SQLGetTypeInfo mengembalikan informasi tentang jenis data yang didukung oleh sumber data. Driver mengembalikan informasi dalam bentuk tataan hasil SQL. Jenis data ditujukan untuk digunakan dalam pernyataan Bahasa Definisi Data (DDL).
Penting
Aplikasi harus menggunakan nama jenis yang dikembalikan di kolom TYPE_NAME hasil SQLGetTypeInfo yang diatur dalam pernyataan ALTER TABLE dan CREATE TABLE . SQLGetTypeInfo dapat mengembalikan lebih dari satu baris dengan nilai yang sama di kolom DATA_TYPE.
SQLRETURN SQLGetTypeInfo(
SQLHSTMT StatementHandle,
SQLSMALLINT DataType);
StatementHandle
[Input] Handel pernyataan untuk kumpulan hasil.
DataType
[Input] Jenis data SQL. Ini harus menjadi salah satu nilai di bagian Jenis Data SQL dari Lampiran D: Jenis Data, atau jenis data SQL khusus driver. SQL_ALL_TYPES menentukan bahwa informasi tentang semua jenis data harus dikembalikan.
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR, atau SQL_INVALID_HANDLE.
Ketika SQLGetTypeInfo 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 SQLGetTypeInfo 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.) |
01S02 | Nilai opsi berubah | Atribut pernyataan tertentu tidak valid karena kondisi kerja implementasi, sehingga nilai serupa untuk sementara diganti. (Panggilan SQLGetStmtAttr untuk menentukan nilai yang diganti sementara.) Nilai pengganti valid untuk StatementHandle hingga kursor ditutup. 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.) |
08S01 | Kegagalan tautan komunikasi | Tautan komunikasi antara driver dan sumber data tempat driver tersambung gagal sebelum fungsi selesai diproses. |
24000 | Status kursor tidak valid | Kursor terbuka pada StatementHandle, dan SQLFetch atau SQLFetchScroll telah dipanggil. 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. Kumpulan hasil terbuka pada StatementHandle, tetapi SQLFetch atau SQLFetchScroll belum dipanggil. |
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. |
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. |
HY004 | Tipe data SQL tidak valid | Nilai yang ditentukan untuk argumen DataType bukan pengidentifikasi tipe data ODBC SQL yang valid atau pengidentifikasi jenis data khusus driver yang didukung oleh driver. |
HY008 | Operasi dibatalkan | Pemrosesan asinkron diaktifkan untuk StatementHandle, kemudian fungsi 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 SQLGetTypeInfo 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. |
HY013 | Kesalahan manajemen memori | Panggilan fungsi tidak dapat diproses karena objek memori yang mendasar tidak dapat diakses, mungkin karena kondisi memori yang rendah. |
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 sesuai 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. |
SQLGetTypeInfo mengembalikan hasil sebagai tataan hasil standar, diurutkan berdasarkan DATA_TYPE lalu dengan seberapa dekat jenis data memetakan ke jenis data ODBC SQL yang sesuai. Jenis data yang ditentukan oleh sumber data lebih diutamakan daripada jenis data yang ditentukan pengguna. Akibatnya, urutan pengurutan belum tentu konsisten tetapi dapat digeneralisasi sebagai DATA_TYPE terlebih dahulu, diikuti dengan TYPE_NAME, keduanya naik. Misalnya, misalkan bahwa sumber data yang ditentukan integer dan jenis data COUNTER, di mana COUNTER secara otomatis meningkat, dan bahwa jenis data yang ditentukan pengguna WHOLENUM juga telah ditentukan. Ini akan dikembalikan dalam urutan INTEGER, WHOLENUM, dan COUNTER, karena WHOLENUM memetakan dengan dekat ke jenis data ODBC SQL SQL_INTEGER, sementara jenis data yang bertambah otomatis, meskipun didukung oleh sumber data, tidak memetakan dengan dekat ke jenis data ODBC SQL. Untuk informasi tentang bagaimana informasi ini dapat digunakan, lihat Pernyataan DDL.
Jika argumen DataType menentukan jenis data yang valid untuk versi ODBC yang didukung oleh driver, tetapi tidak didukung oleh driver, maka akan mengembalikan tataan hasil kosong.
Catatan
Untuk informasi selengkapnya tentang penggunaan umum, argumen, dan data fungsi katalog ODBC yang dikembalikan, lihat Fungsi Katalog.
Kolom berikut telah diganti namanya menjadi ODBC 3.x. Perubahan nama kolom tidak memengaruhi kompatibilitas mundur karena aplikasi mengikat dengan nomor kolom.
Kolom ODBC 2.0 | ODBC 3.kolom x |
---|---|
PRESISI | COLUMN_SIZE |
UANG | FIXED_PREC_SCALE |
AUTO_INCREMENT | AUTO_UNIQUE_VALUE |
Kolom berikut telah ditambahkan ke kumpulan hasil yang dikembalikan oleh SQLGetTypeInfo untuk ODBC 3.x:
SQL_DATA_TYPE
INTERVAL_PRECISION
SQL_DATETIME_SUB
NUM_PREC_RADIX
Tabel berikut mencantumkan kolom dalam tataan hasil. Kolom tambahan di luar kolom 19 (INTERVAL_PRECISION) dapat ditentukan oleh driver. Aplikasi harus mendapatkan akses ke kolom khusus driver dengan menghitung mundur dari akhir tataan hasil daripada menentukan posisi ordinal eksplisit. Untuk informasi selengkapnya, lihat Data yang Dikembalikan oleh Fungsi Katalog.
Catatan
SQLGetTypeInfo mungkin tidak mengembalikan semua jenis data. Misalnya, driver mungkin tidak mengembalikan jenis data yang ditentukan pengguna. Aplikasi dapat menggunakan jenis data yang valid, terlepas dari apakah itu dikembalikan oleh SQLGetTypeInfo. Jenis data yang dikembalikan oleh SQLGetTypeInfo adalah yang didukung oleh sumber data. Mereka ditujukan untuk digunakan dalam pernyataan Bahasa Definisi Data (DDL). Driver dapat mengembalikan data tataan hasil menggunakan jenis data selain jenis yang dikembalikan oleh SQLGetTypeInfo. Dalam membuat tataan hasil untuk fungsi katalog, driver mungkin menggunakan jenis data yang tidak didukung oleh sumber data.
Nama kolom | Kolom number |
Jenis Data | Komentar |
---|---|---|---|
TYPE_NAME (ODBC 2.0) | 1 | Varchar bukan NULL | Nama jenis data yang bergantung pada sumber data; misalnya, "CHAR()", "VARCHAR()", "MONEY", "LONG VARBINARY", atau "CHAR ( ) FOR BIT DATA". Aplikasi harus menggunakan nama ini dalam pernyataan CREATE TABLE dan ALTER TABLE . |
DATA_TYPE (ODBC 2.0) | 2 | Smallint bukan NULL | Jenis data SQL. Ini bisa berupa jenis data ODBC SQL atau jenis data SQL khusus driver. Untuk jenis data tanggalwaktu atau interval, kolom ini mengembalikan tipe data ringkas (seperti SQL_TYPE_TIME atau SQL_INTERVAL_YEAR_TO_MONTH). Untuk daftar tipe data ODBC SQL yang valid, lihat Jenis Data SQL di Lampiran D: Jenis Data. Untuk informasi tentang jenis data SQL khusus driver, lihat dokumentasi driver. |
COLUMN_SIZE (ODBC 2.0) | 3 | Bilangan bulat | Ukuran kolom maksimum yang didukung server untuk tipe data ini. Untuk data numerik, ini adalah presisi maksimum. Untuk data string, ini adalah panjang karakter. Untuk jenis data tanggalwaktu, ini adalah panjang karakter representasi string (dengan asumsi presisi maksimum yang diizinkan dari komponen detik pecahan). NULL dikembalikan untuk jenis data di mana ukuran kolom tidak berlaku. Untuk jenis data interval, ini adalah jumlah karakter dalam representasi karakter dari interval literal (seperti yang didefinisikan oleh presisi depan interval; lihat Interval Data Type Length in Appendix D: Data Type). Untuk informasi selengkapnya tentang ukuran kolom, lihat Ukuran Kolom, Digit Desimal, Panjang Oktet Transfer, dan Ukuran Tampilan dalam Lampiran D: Jenis Data. |
LITERAL_PREFIX (ODBC 2.0) | 4 | Varchar | Karakter atau karakter yang digunakan untuk mengawali harfiah; misalnya, tanda kutip tunggal (') untuk jenis data karakter atau 0x untuk jenis data biner; NULL dikembalikan untuk jenis data di mana awalan harfiah tidak berlaku. |
LITERAL_SUFFIX (ODBC 2.0) | 5 | Varchar | Karakter atau karakter yang digunakan untuk mengakhiri harfiah; misalnya, tanda kutip tunggal (') untuk jenis data karakter; NULL dikembalikan untuk jenis data di mana akhiran harfiah tidak berlaku. |
CREATE_PARAMS (ODBC 2.0) | 6 | Varchar | Daftar kata kunci, dipisahkan oleh koma, sesuai dengan setiap parameter yang dapat ditentukan aplikasi dalam tanda kurung saat menggunakan nama yang dikembalikan di bidang TYPE_NAME. Kata kunci dalam daftar dapat berupa salah satu hal berikut: panjang, presisi, atau skala. Mereka muncul dalam urutan sintaksis mengharuskan mereka untuk digunakan. Misalnya, CREATE_PARAMS untuk DECIMAL adalah "presisi,skala"; CREATE_PARAMS untuk VARCHAR akan sama dengan "panjang." NULL dikembalikan jika tidak ada parameter untuk definisi jenis data; misalnya, BILANGAN BULAT. Driver menyediakan teks CREATE_PARAMS dalam bahasa negara/wilayah tempatnya digunakan. |
NULLABLE (ODBC 2.0) | 7 | Smallint bukan NULL | Apakah tipe data menerima nilai NULL: SQL_NO_NULLS jika jenis data tidak menerima nilai NULL. SQL_NULLABLE jika jenis data menerima nilai NULL. SQL_NULLABLE_UNKNOWN jika tidak diketahui apakah kolom menerima nilai NULL. |
CASE_SENSITIVE (ODBC 2.0) | 8 | Smallint bukan NULL | Apakah jenis data karakter peka huruf besar/kecil dalam kolate dan perbandingan: SQL_TRUE jika jenis data adalah jenis data karakter dan peka huruf besar/kecil. SQL_FALSE jika jenis data bukan tipe data karakter atau tidak peka huruf besar/kecil. |
DAPAT DICARI (ODBC 2.0) | 9 | Smallint bukan NULL | Bagaimana jenis data digunakan dalam klausa WHERE : SQL_PRED_NONE jika kolom tidak dapat digunakan dalam klausa WHERE . (Ini sama dengan nilai SQL_UNSEARCHABLE di ODBC 2.x.) SQL_PRED_CHAR apakah kolom dapat digunakan dalam klausa WHERE , tetapi hanya dengan predikat LIKE . (Ini sama dengan nilai SQL_LIKE_ONLY di ODBC 2.x.) SQL_PRED_BASIC apakah kolom dapat digunakan dalam klausa WHERE dengan semua operator perbandingan kecuali LIKE (perbandingan, perbandingan terkuantifikasi, ANTARA, DISTINCT, IN, MATCH, dan UNIQUE). (Ini sama dengan nilai SQL_ALL_EXCEPT_LIKE di ODBC 2.x.) SQL_SEARCHABLE apakah kolom dapat digunakan dalam klausa WHERE dengan operator perbandingan apa pun. |
UNSIGNED_ATTRIBUTE (ODBC 2.0) | 10 | Smallint | Apakah tipe data tidak ditandatangani: SQL_TRUE jika jenis data tidak ditandatangani. SQL_FALSE jika jenis data ditandatangani. NULL dikembalikan jika atribut tidak berlaku untuk jenis data atau jenis data tidak numerik. |
FIXED_PREC_SCALE (ODBC 2.0) | 11 | Smallint bukan NULL | Apakah jenis data memiliki presisi dan skala tetap yang telah ditentukan sebelumnya (yang khusus untuk sumber data), seperti jenis data uang: SQL_TRUE jika memiliki presisi dan skala tetap yang telah ditentukan sebelumnya. SQL_FALSE jika tidak memiliki presisi dan skala tetap yang telah ditentukan sebelumnya. |
AUTO_UNIQUE_VALUE (ODBC 2.0) | 12 | Smallint | Apakah jenis data bersifat autoincrementing: SQL_TRUE jika jenis data bersifat autoincrementing. SQL_FALSE jika jenis data tidak di-autoincrementing. NULL dikembalikan jika atribut tidak berlaku untuk jenis data atau jenis data tidak numerik. Aplikasi dapat menyisipkan nilai ke dalam kolom yang memiliki atribut ini, tetapi biasanya tidak dapat memperbarui nilai di kolom. Saat sisipan dibuat ke dalam kolom kenaikan otomatis, nilai unik disisipkan ke dalam kolom pada waktu penyisipan. Kenaikan tidak ditentukan, tetapi khusus sumber data. Aplikasi tidak boleh berasumsi bahwa kolom kenaikan otomatis dimulai pada titik atau kenaikan tertentu dengan nilai tertentu. |
LOCAL_TYPE_NAME (ODBC 2.0) | 13 | Varchar | Versi yang dilokalkan dari nama dependen sumber data dari jenis data. NULL dikembalikan jika nama yang dilokalkan tidak didukung oleh sumber data. Nama ini hanya ditujukan untuk ditampilkan, seperti dalam kotak dialog. |
MINIMUM_SCALE (ODBC 2.0) | 14 | Smallint | Skala minimum jenis data pada sumber data. Jika jenis data memiliki skala tetap, kolom MINIMUM_SCALE dan MAXIMUM_SCALE keduanya berisi nilai ini. Misalnya, kolom SQL_TYPE_TIMESTAMP mungkin memiliki skala tetap untuk detik pecahan. NULL dikembalikan di mana skala tidak berlaku. Untuk informasi selengkapnya, lihat Ukuran Kolom, Digit Desimal, Panjang Oktet Transfer, dan Ukuran Tampilan dalam Lampiran D: Jenis Data. |
MAXIMUM_SCALE (ODBC 2.0) | 15 | Smallint | Skala maksimum jenis data pada sumber data. NULL dikembalikan di mana skala tidak berlaku. Jika skala maksimum tidak didefinisikan secara terpisah pada sumber data, tetapi didefinisikan sama dengan presisi maksimum, kolom ini berisi nilai yang sama dengan kolom COLUMN_SIZE. Untuk informasi selengkapnya, lihat Ukuran Kolom, Digit Desimal, Panjang Oktet Transfer, dan Ukuran Tampilan dalam Lampiran D: Jenis Data. |
SQL_DATA_TYPE (ODBC 3.0) | 16 | Smallint NOT NULL | Nilai jenis data SQL seperti yang muncul di bidang SQL_DESC_TYPE deskriptor. Kolom ini sama dengan kolom DATA_TYPE, kecuali untuk jenis data interval dan tanggalwaktu. Untuk jenis data interval dan tanggalwaktu, bidang SQL_DATA_TYPE dalam kumpulan hasil akan mengembalikan SQL_INTERVAL atau SQL_DATETIME, dan bidang SQL_DATETIME_SUB akan mengembalikan subkode untuk jenis data interval atau tanggalwaktu tertentu. (Lihat Lampiran D: Jenis Data.) |
SQL_DATETIME_SUB (ODBC 3.0) | 17 | Smallint | Saat nilai SQL_DATA_TYPE SQL_DATETIME atau SQL_INTERVAL, kolom ini berisi subkode tanggalwaktu/interval. Untuk tipe data selain tanggalwaktu dan interval, bidang ini adalah NULL. Untuk jenis data interval atau tanggalwaktu, bidang SQL_DATA_TYPE dalam kumpulan hasil akan mengembalikan SQL_INTERVAL atau SQL_DATETIME, dan bidang SQL_DATETIME_SUB akan mengembalikan subkode untuk interval atau jenis data tanggalwaktu tertentu. (Lihat Lampiran D: Jenis Data.) |
NUM_PREC_RADIX (ODBC 3.0) | 18 | Bilangan bulat | Jika jenis data adalah perkiraan jenis numerik, kolom ini berisi nilai 2 untuk menunjukkan bahwa COLUMN_SIZE menentukan sejumlah bit. Untuk jenis numerik yang tepat, kolom ini berisi nilai 10 untuk menunjukkan bahwa COLUMN_SIZE menentukan sejumlah digit desimal. Jika tidak, kolom ini adalah NULL. |
INTERVAL_PRECISION (ODBC 3.0) | 19 | Smallint | Jika jenis data adalah jenis data interval, maka kolom ini berisi nilai presisi interval awal. (Lihat Presisi Tipe Data Interval dalam Lampiran D: Jenis Data.) Jika tidak, kolom ini adalah NULL. |
Informasi atribut dapat berlaku untuk jenis data atau ke kolom tertentu dalam tataan hasil. SQLGetTypeInfo mengembalikan informasi tentang atribut yang terkait dengan jenis data; SQLColAttribute mengembalikan informasi tentang atribut yang terkait dengan kolom dalam kumpulan hasil.
Untuk informasi tentang | Lihat |
---|---|
Mengikat buffer ke kolom dalam tataan hasil | Fungsi SQLBindCol |
Membatalkan pemrosesan pernyataan | Fungsi SQLCancel |
Mengembalikan informasi tentang kolom dalam tataan hasil | Fungsi SQLColAttribute |
Mengambil blok data atau menggulir melalui kumpulan hasil | Fungsi SQLFetchScroll |
Mengambil satu baris atau blok data dalam arah terusan saja | Fungsi SQLFetch |
Mengembalikan informasi tentang driver atau sumber data | Fungsi SQLGetInfo |