@
SQL*Plusコマンド
です。 、PL/SQLでは意味がありません。スクリプトは解析時にPL/SQLブロックに含まれています。これは、list
バッファ内のコード。制御ブロックで宣言された変数は、置換を必要とせずに、「インクルード」コードで直接使用できます。
例として、uitvoer.sql
の場合 含まれているだけです:
dbms_output.put_line(v_s);
次に、この制御スクリプト:
set serveroutput on
declare
v_s varchar2(10) := 'Test';
begin
@uitvoer.sql
end;
/
list
生産:
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;
バッファ内のPL/SQLブロックには、コードが含まれていますが、ありません。 uitvoer.sql
への参照 。ただし、含まれているコードは、まだスコープ内にある制御スクリプトの変数を参照しているため、機能しました。
異なる名前の制御変数を許可する場合は、uitvoer.sql
を許可します。 おそらくもっと柔軟に呼び出されるために、置換変数を使用することはできますが、値ではなく変数名を置換することになります。たとえば、このuitvoer.sql
では (置換変数の割り当てはしないことに注意してください 引用符で囲みます):
declare
variable_s varchar2(10);
begin
variable_s := &&1;
dbms_output.put_line(variable_s);
end;
そして、変数名を渡す制御スクリプト:
declare
v_s varchar2(10) := 'Test';
begin
@uitvoer.sql v_s
end;
/
ご覧のとおり:
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;