Seperti yang dikatakan Nicholas Karasnov, Anda memerlukan argumen dalam panggilan agar sesuai dengan deklarasi prosedur. Dalam hal ini Anda memiliki OUT
parameter, jadi Anda memerlukan suatu tempat untuk data yang Anda pilih - sesuatu yang sesuai dengan sys_refcursor
jenis parameter.
Jika Anda menggunakan SQL*Plus untuk mengujinya, Anda dapat mendeklarasikan Variabel SQL*Plus
untuk ini dan kemudian berikan itu sebagai variabel pengikat, lalu gunakan print
perintah untuk menampilkan isi kursor:
variable rc refcursor
exec javao(1, :rc);
print rc
Ini bekerja di SQL Developer juga. Saat Anda memanggil prosedur dari kode lain, Anda akan memiliki variabel yang dideklarasikan dalam blok PL/SQL, atau dalam aplikasi eksternal (mis. melalui jdbc
), tetapi detailnya bergantung pada apa yang Anda lakukan.
Untuk menelepon dari Java, lakukan sesuatu seperti:
// get connection
CallableStatement cStmt = conn.prepareCall("{ call javao(?, ?) }");
cStmt.setInt(1, 1);
cStmt.registerOutParameter(2, OracleTypes.cursor);
cStmt.execute();
ResultSet rSet = ((OracleCallableStatement) cStmt).getCursor(2);
while (rSet.next())
{
// get columns from result set row and do something with the data
}
tapi itu berbatasan dengan pseudocode, dan Anda harus membaca dokumentasi untuk mengisi bagian yang kosong (dan memperbaiki kesalahan apa pun; Anda mungkin memerlukan jenis pernyataan khusus Oracle misalnya), dan menambahkan penutupan objek dan penanganan kesalahan semua barang bagus lainnya.