Dari pencarian yang saya lakukan, tampaknya Anda tidak dapat mendeklarasikan dan mengatur variabel seperti ini dalam pernyataan Select. Apakah ini benar atau saya melewatkan sesuatu?
Dalam Oracle PL/SQL dan SQL adalah dua bahasa terpisah dengan dua mesin terpisah. Anda dapat menyematkan SQL DML dalam PL/SQL, dan itu akan memberi Anda variabel. Seperti blok PL/SQL anonim berikut. Perhatikan /
pada akhirnya bukan bagian dari PL/SQL, tetapi memberitahu SQL*Plus untuk mengirim blok sebelumnya.
declare
v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
v_Count number;
begin
select count(*) into v_Count
from Usage
where UseTime > v_Date1;
dbms_output.put_line(v_Count);
end;
/
Masalahnya adalah blok yang setara dengan kode T-SQL Anda tidak akan berfungsi:
SQL> declare
2 v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
3 begin
4 select VisualId
5 from Usage
6 where UseTime > v_Date1;
7 end;
8 /
select VisualId
*
ERROR at line 4:
ORA-06550: line 4, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
Untuk melewatkan hasil kueri dari PL/SQL, baik blok anonim, prosedur tersimpan, atau fungsi tersimpan, kursor harus dideklarasikan, dibuka, dan kemudian dikembalikan ke program pemanggil. (Di luar cakupan menjawab pertanyaan ini. EDIT: lihat Mendapatkan hasil dari prosedur tersimpan Oracle)
Alat klien yang terhubung ke database mungkin memiliki variabel pengikatnya sendiri. Dalam SQL*Plus:
SQL> -- SQL*Plus does not all date type in this context
SQL> -- So using varchar2 to hold text
SQL> variable v_Date1 varchar2(20)
SQL>
SQL> -- use PL/SQL to set the value of the bind variable
SQL> exec :v_Date1 := '02-Aug-2010';
PL/SQL procedure successfully completed.
SQL> -- Converting to a date, since the variable is not yet a date.
SQL> -- Note the use of colon, this tells SQL*Plus that v_Date1
SQL> -- is a bind variable.
SQL> select VisualId
2 from Usage
3 where UseTime > to_char(:v_Date1, 'DD-Mon-YYYY');
no rows selected
Perhatikan di atas dalam SQLPlus, mungkin tidak (mungkin tidak akan) bekerja di pengembang Toad PL/SQL, dll. Baris yang dimulai dengan variabel dan exec adalah SQL Ditambah perintah. Itu bukan perintah SQL atau PL/SQL. Tidak ada baris yang dipilih karena tabel kosong.