Bagikan melalui


Parameter Pengikatan berdasarkan Nama (Parameter Bernama)

DBMS tertentu memungkinkan aplikasi menentukan parameter ke prosedur tersimpan berdasarkan nama alih-alih berdasarkan posisi dalam panggilan prosedur. Parameter tersebut disebut parameter bernama. ODBC mendukung penggunaan parameter bernama. Di ODBC, parameter bernama hanya digunakan dalam panggilan ke prosedur tersimpan dan tidak dapat digunakan dalam pernyataan SQL lainnya.

Driver memeriksa nilai bidang SQL_DESC_UNNAMED IPD untuk menentukan apakah parameter bernama digunakan. Jika SQL_DESC_UNNAMED tidak diatur ke SQL_UNNAMED, driver menggunakan nama di bidang SQL_DESC_NAME IPD untuk mengidentifikasi parameter. Untuk mengikat parameter, aplikasi dapat memanggil SQLBindParameter untuk menentukan informasi parameter lalu dapat memanggil SQLSetDescField untuk mengatur bidang SQL_DESC_NAME IPD. Ketika parameter bernama digunakan, urutan parameter dalam panggilan prosedur tidak penting dan nomor rekaman parameter diabaikan.

Perbedaan antara parameter yang tidak disebutkan namanya dan parameter bernama ada dalam hubungan antara jumlah rekaman deskriptor dan nomor parameter dalam prosedur. Ketika parameter yang tidak disebutkan namanya digunakan, penanda parameter pertama terkait dengan rekaman pertama dalam deskriptor parameter, yang pada gilirannya terkait dengan parameter pertama (dalam urutan pembuatan) dalam panggilan prosedur. Ketika parameter bernama digunakan, penanda parameter pertama masih terkait dengan rekaman pertama deskriptor parameter, tetapi hubungan antara nomor rekaman deskriptor dan nomor parameter dalam prosedur tidak ada lagi. Parameter bernama tidak menggunakan pemetaan nomor rekaman deskriptor ke posisi parameter prosedur; sebagai gantinya, nama catatan deskriptor dipetakan ke nama parameter prosedur.

Catatan

Jika populasi otomatis IPD diaktifkan, driver akan mengisi deskriptor sememikian rupa sehingga urutan rekaman deskriptor akan cocok dengan urutan parameter dalam definisi prosedur, bahkan jika parameter bernama digunakan.

Jika parameter bernama digunakan, semua parameter harus diberi nama parameter. Jika parameter apa pun bukan parameter bernama, maka tidak ada parameter yang diberi nama parameter. Jika ada campuran parameter bernama dan parameter yang tidak disebutkan namanya, perilakunya akan bergantung pada driver.

Sebagai contoh parameter bernama, misalkan prosedur tersimpan SQL Server telah didefinisikan sebagai berikut:

CREATE PROCEDURE test @title_id int = 1, @quote char(30) AS <blah>  

Dalam prosedur ini, parameter pertama, @title_id, memiliki nilai default 1. Aplikasi dapat menggunakan kode berikut untuk memanggil prosedur ini sehingga hanya menentukan satu parameter dinamis. Parameter ini adalah parameter bernama dengan nama "@quote".

// Prepare the procedure invocation statement.  
SQLPrepare(hstmt, "{call test(?)}", SQL_NTS);  
  
// Populate record 1 of ipd.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,  
                  30, 0, szQuote, 0, &cbValue);  
  
// Get ipd handle and set the SQL_DESC_NAMED and SQL_DESC_UNNAMED fields  
// for record #1.  
SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_DESC, &hIpd, 0, 0);  
SQLSetDescField(hIpd, 1, SQL_DESC_NAME, "@quote", SQL_NTS);  
  
// Assuming that szQuote has been appropriately initialized,  
// execute.  
SQLExecute(hstmt);