Anda harus memilih ke sesuatu. Jika tidak, maka kueri bahkan tidak dieksekusi (meskipun sudah diurai).
create or replace procedure select_procedure
as
l_name student.name%TYPE;
l_surname student.name%TYPE;
begin
execute immediate
'select name, surname
from student
where id_student = 1'
into l_name, l_surname;
end;
/
Namun, tanpa urutan tertentu:(a) Anda harus menggunakan variabel bind alih-alih memiliki nilai literal 1 yang disematkan dalam pernyataan dinamis; (b) ini tidak perlu dinamis sama sekali; dan (c) pemanggil tidak akan dapat melihat nilai yang dikembalikan oleh kueri - kecuali jika Anda memilih ke OUT
sebagai gantinya, atau tampilkan dengan dbms_output()
(walaupun itu seharusnya hanya digunakan untuk debugging karena Anda tidak dapat mengontrol apakah klien akan menampilkannya).
Jadi Anda bisa melakukan:
create or replace procedure select_procedure
as
l_name student.name%TYPE;
l_surname student.name%TYPE;
begin
select name, surname
into l_name, l_surname
from student
where id_student = 1;
dbms_output.put_line('name=' || l_name ||', surname=' || l_surname);
end;
/
atau
create or replace procedure select_procedure (
p_name OUT student.name%TYPE,
p_surname OUT student.name%TYPE
)
as
begin
select name, surname
into p_name, p_surname
from student
where id_student = 1;
end;
/
dan minta penelepon Anda memasukkan nama variabelnya sendiri untuk diisi, dan kemudian lakukan apa pun yang diperlukan dengan itu. Penelepon biasanya juga akan memberikan ID yang Anda cari, jadi Anda tidak memiliki 1 hard-coded.
Tampaknya prosedur bukanlah mekanisme terbaik untuk ini.
Juga, menggunakan select ... into
(statis atau dinamis) akan error jika kueri mengembalikan nol baris atau lebih dari satu baris. Ini hanya akan berfungsi jika ada tepat satu baris yang dikembalikan. Kursor akan menangani sejumlah baris - tetapi kecuali Anda hanya mencetak hasilnya (seperti yang ditunjukkan @Jayanth), Anda harus mengembalikan kursor ke pemanggil. Anda dapat melakukan bulk collect into
koleksi sebagai gantinya, tetapi Anda masih harus melakukan sesuatu dengan itu.