1

sqlplus を介していくつかの sql ファイルを実行する bash スクリプトがあります。

sqlplus $connectioninfo << end
start file1.sql
start file2.sql
start file3.sql $variable
quit
end

file3 にはいくつかの PL/SQL があります。

BEGIN

  DBMS_OUTPUT.PUT_LINE(&1);

END;
/

"&1"ただし、の値の代わりにリテラルを出力するだけです$variable。file3 で次のことも試しました。

DEFINE var_a = &1;
BEGIN

  DBMS_OUTPUT.PUT_LINE(var_a);

END;
/

また、次のこともできます。

DECLARE
  var_b VARCHAR2(64) := &1;

BEGIN

  DBMS_OUTPUT.PUT_LINE(var_b);

END;
/

そして最後に:

DEFINE var_a = &1;

DECLARE
  var_b VARCHAR2(64) := var_a;

BEGIN

  DBMS_OUTPUT.PUT_LINE(var_b);

END;
/

ただし、さまざまなエラーが発生するか、これらすべてに対してリテラル値 '&1' が表示されます。

4

1 に答える 1

3

SET DEFINE ONスクリプトの先頭に追加してみてくださいfile3.sql

SET DEFINEがの場合ON、SQL*Plus は&...置換パラメータをその値に置き換えます。もしそうならSET DEFINE(OFFそれはあなたのためだと思われます)、SQL*Plus はこれを行いません。

于 2013-03-21T22:24:00.713 に答える