@
adalah perintah SQL*Plus
, itu tidak memiliki arti dalam PL/SQL. Skrip Anda disertakan dalam blok PL/SQL pada waktu penguraian, yang dapat Anda lihat jika Anda list
kode dalam buffer. Variabel yang dideklarasikan di blok kontrol Anda tersedia untuk kode 'disertakan' secara langsung, tanpa perlu diganti.
Sebagai contoh, jika uitvoer.sql
hanya berisi:
dbms_output.put_line(v_s);
Kemudian skrip kontrol ini:
set serveroutput on
declare
v_s varchar2(10) := 'Test';
begin
@uitvoer.sql
end;
/
list
Menghasilkan:
Test
PL/SQL procedure successfully completed.
1 declare
2 v_s varchar2(10) := 'Test';
3 begin
4 dbms_output.put_line(v_s);
5* end;
Blok PL/SQL dalam buffer memiliki kode yang disertakan, bukan referensi ke uitvoer.sql
. Tetapi kode yang disertakan berfungsi karena merujuk ke variabel dari skrip kontrol yang masih dalam cakupan.
Jika Anda ingin mengizinkan variabel kontrol memiliki nama yang berbeda, izinkan uitvoer.sql
untuk dipanggil lebih fleksibel mungkin, maka Anda masih dapat menggunakan variabel substitusi, tetapi Anda masih mengganti nama variabel, bukan nilainya. Misalnya, dengan uitvoer.sql
ini (perhatikan bahwa penetapan variabel substitusi tidak memiliki kutipan di sekitarnya):
declare
variable_s varchar2(10);
begin
variable_s := &&1;
dbms_output.put_line(variable_s);
end;
Dan skrip kontrol Anda meneruskan nama variabel:
declare
v_s varchar2(10) := 'Test';
begin
@uitvoer.sql v_s
end;
/
Anda melihat:
old 7: variable_s := &&1;
new 7: variable_s := v_s;
Test
PL/SQL procedure successfully completed.
1 declare
2 v_s varchar2(10) := 'Test';
3 begin
4 declare
5 variable_s varchar2(10);
6 begin
7 variable_s := &&1;
8 dbms_output.put_line(variable_s);
9 end;
10* end;