@
to polecenie SQL*Plus
, nie ma to znaczenia w PL/SQL. Twój skrypt jest włączany do bloku PL/SQL w czasie analizy, co możesz zobaczyć, jeśli list
kod w buforze. Zmienne zadeklarowane w bloku kontrolnym są dostępne bezpośrednio w kodzie dołączonym, bez konieczności podstawiania.
Na przykład, jeśli uitvoer.sql
zawiera tylko:
dbms_output.put_line(v_s);
Następnie ten skrypt sterujący:
set serveroutput on
declare
v_s varchar2(10) := 'Test';
begin
@uitvoer.sql
end;
/
list
Produkuje:
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 w buforze zawiera dołączony kod, nie odwołanie do uitvoer.sql
. Ale dołączony kod zadziałał, ponieważ odwoływał się do zmiennej ze skryptu sterującego, która wciąż była w zakresie.
Jeśli chcesz zezwolić na zmienne kontrolne mające różne nazwy, zezwól na uitvoer.sql
być wywoływana bardziej elastycznie, wtedy nadal można używać zmiennych podstawień, ale nadal zastępujesz nazwę zmiennej, a nie jej wartość. Na przykład za pomocą tego uitvoer.sql
(zauważ, że przypisanie zmiennej podstawienia nie) otoczone cytatami):
declare
variable_s varchar2(10);
begin
variable_s := &&1;
dbms_output.put_line(variable_s);
end;
A twój skrypt sterujący przekazuje nazwę zmiennej:
declare
v_s varchar2(10) := 'Test';
begin
@uitvoer.sql v_s
end;
/
Widzisz:
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;