Jawaban yang Direvisi
Jika Anda tidak memanggil kode ini dari program lain, opsinya adalah melewati PL/SQL dan melakukannya secara ketat di SQL menggunakan variabel bind:
var myname varchar2(20);
exec :myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = :myname;
Di banyak alat (seperti Toad dan SQL Developer), menghilangkan var
dan exec
pernyataan akan menyebabkan program meminta Anda untuk memasukkan nilainya.
Jawaban Asli
Perbedaan besar antara T-SQL dan PL/SQL adalah Oracle tidak mengizinkan Anda mengembalikan hasil kueri secara implisit. Hasilnya selalu harus dikembalikan secara eksplisit dengan cara tertentu. Cara paling sederhana adalah dengan menggunakan DBMS_OUTPUT
(kira-kira setara dengan print
) untuk menampilkan variabel:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
dbms_output.print_line(myname);
END;
Namun, ini tidak terlalu membantu jika Anda mencoba mengembalikan kumpulan hasil. Dalam hal ini, Anda ingin mengembalikan koleksi atau refkursor. Namun, menggunakan salah satu dari solusi tersebut akan memerlukan pembungkusan kode Anda dalam suatu fungsi atau prosedur dan menjalankan fungsi/prosedur dari sesuatu yang mampu memakan hasil. Fungsi yang bekerja dengan cara ini mungkin terlihat seperti ini:
CREATE FUNCTION my_function (myname in varchar2)
my_refcursor out sys_refcursor
BEGIN
open my_refcursor for
SELECT *
FROM Customers
WHERE Name = myname;
return my_refcursor;
END my_function;