Bagikan melalui


Panggilan Prosedur

Prosedur adalah objek yang dapat dieksekusi yang disimpan pada sumber data. Umumnya, ini adalah satu atau beberapa pernyataan SQL yang telah dikommpilasikan sebelumnya. Urutan escape untuk memanggil prosedur adalah

{[?=]panggil procedure-name[([parameter][,[parameter]]...)]}

di mana nama prosedur menentukan nama prosedur dan parameter menentukan parameter prosedur.

Untuk informasi selengkapnya tentang urutan escape panggilan prosedur, lihat Prosedur Panggil Urutan Escape di Lampiran C: Tata Bahasa SQL.

Prosedur dapat memiliki parameter nol atau lebih. Ini juga dapat mengembalikan nilai, seperti yang ditunjukkan oleh penanda parameter opsional ?= di awal sintaks. Jika parameter adalah parameter input atau input/output, parameter tersebut dapat berupa literal atau penanda parameter. Namun, aplikasi yang dapat dioperasikan harus selalu menggunakan penanda parameter karena beberapa sumber data tidak menerima nilai parameter harfiah. Jika parameter adalah parameter output, parameter harus berupa penanda parameter. Penanda parameter harus terikat dengan SQLBindParameter sebelum pernyataan panggilan prosedur dijalankan.

Parameter input dan input/output dapat dihilangkan dari panggilan prosedur. Jika prosedur dipanggil dengan tanda kurung tetapi tanpa parameter apa pun, seperti {call procedure-name()}, driver menginstruksikan sumber data untuk menggunakan nilai default untuk parameter pertama. Jika prosedur tidak memiliki parameter apa pun, ini dapat menyebabkan prosedur gagal. Jika prosedur dipanggil tanpa tanda kurung, seperti {call procedure-name}, driver tidak mengirim nilai parameter apa pun.

Literal dapat ditentukan untuk parameter input dan input/output dalam panggilan prosedur. Misalnya, misalkan prosedur InsertOrder memiliki lima parameter input. Panggilan berikut ke InsertOrder menghilangkan parameter pertama, menyediakan literal untuk parameter kedua, dan menggunakan penanda parameter untuk parameter ketiga, keempat, dan kelima:

{call InsertOrder(, 10, ?, ?, ?)}   // Not interoperable!  

Perhatikan bahwa jika parameter dihilangkan, koma yang memisahkannya dari parameter lain masih harus muncul. Jika parameter input atau input/output dihilangkan, prosedur menggunakan nilai default parameter. Cara lain untuk menentukan nilai default parameter input atau input/output adalah dengan mengatur nilai buffer panjang/indikator yang terikat ke parameter ke SQL_DEFAULT_PARAM.

Jika parameter input/output dihilangkan atau jika literal disediakan untuk parameter , driver akan membuang nilai output. Demikian pula, jika penanda parameter untuk nilai pengembalian prosedur dihilangkan, driver akan membuang nilai pengembalian. Terakhir, jika aplikasi menentukan parameter nilai pengembalian untuk prosedur yang tidak mengembalikan nilai, driver mengatur nilai buffer panjang/indikator yang terikat ke parameter ke SQL_NULL_DATA.

Misalkan prosedur PARTS_IN_ORDERS membuat kumpulan hasil yang berisi daftar pesanan yang berisi nomor bagian tertentu. Kode berikut memanggil prosedur ini untuk nomor bagian 544:

SQLUINTEGER   PartID;  
SQLINTEGER    PartIDInd = 0;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0,  
                  &PartID, 0, PartIDInd);  
  
// Place the department number in PartID.  
PartID = 544;  
  
// Execute the statement.  
SQLExecDirect(hstmt, "{call PARTS_IN_ORDERS(?)}", SQL_NTS);  

Untuk menentukan apakah sumber data mendukung prosedur, aplikasi memanggil SQLGetInfo dengan opsi SQL_PROCEDURES.

Untuk informasi selengkapnya tentang prosedur, lihat Prosedur.