Parameter Prosedur

Parameter dalam panggilan prosedur dapat berupa parameter input, input/output, atau output. Ini berbeda dari parameter dalam semua pernyataan SQL lainnya, yang selalu merupakan parameter input.

Parameter input digunakan untuk mengirim nilai ke prosedur. Misalnya, tabel Bagian memiliki kolom PartID, Deskripsi, dan Harga. Prosedur InsertPart mungkin memiliki parameter input untuk setiap kolom dalam tabel. Misalnya:

{call InsertPart(?, ?, ?)}  

Driver tidak boleh mengubah konten buffer input hingga SQLExecDirect atau SQLExecute mengembalikan SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE, atau SQL_NO_DATA. Konten buffer input tidak boleh dimodifikasi sementara SQLExecDirect atau SQLExecute mengembalikan SQL_NEED_DATA atau SQL_STILL_EXECUTING.

Parameter input/output digunakan baik untuk mengirim nilai ke prosedur dan mengambil nilai dari prosedur. Menggunakan parameter yang sama dengan parameter input dan output cenderung membingungkan dan harus dihindari. Misalnya, prosedur menerima ID pesanan dan mengembalikan ID pelanggan. Ini dapat didefinisikan dengan parameter input/output tunggal:

{call GetCustID(?)}  

Mungkin lebih baik menggunakan dua parameter: parameter input untuk ID pesanan dan parameter output atau input/output untuk ID pelanggan:

{call GetCustID(?, ?)}  

Parameter output digunakan untuk mengambil nilai pengembalian prosedur dan untuk mengambil nilai dari argumen prosedur; prosedur yang mengembalikan nilai terkadang dikenal sebagai fungsi. Misalnya, prosedur GetCustID yang baru saja disebutkan mengembalikan nilai yang menunjukkan apakah ia dapat menemukan pesanan. Dalam panggilan berikut, parameter pertama adalah parameter output yang digunakan untuk mengambil nilai pengembalian prosedur, parameter kedua adalah parameter input yang digunakan untuk menentukan ID pesanan, dan parameter ketiga adalah parameter output yang digunakan untuk mengambil ID pelanggan:

{? = call GetCustID(?, ?)}  

Driver menangani nilai untuk parameter input dan input/output dalam prosedur tidak berbeda dari parameter input dalam pernyataan SQL lainnya. Ketika pernyataan dijalankan, mereka mengambil nilai variabel yang terikat ke parameter ini dan mengirimkannya ke sumber data.

Setelah pernyataan dijalankan, driver menyimpan nilai parameter input/output dan output yang dikembalikan dalam variabel yang terikat ke parameter tersebut. Nilai yang dikembalikan ini tidak dijamin diatur hingga setelah semua hasil yang dikembalikan oleh prosedur telah diambil dan SQLMoreResults telah mengembalikan SQL_NO_DATA. Jika menjalankan pernyataan menghasilkan kesalahan, konten buffer parameter input/output atau buffer parameter output tidak ditentukan.

Aplikasi memanggil SQLProcedure untuk menentukan apakah prosedur memiliki nilai pengembalian. Ini memanggil SQLProcedureColumns untuk menentukan jenis (nilai pengembalian, input, input/output, atau output) dari setiap parameter prosedur.