この動作を変更する方法はないようです。START
私が見つけることができる唯一の漠然とした参照は、置換変数のドキュメント全体に散らばって@
います@@
。
START コマンドは、引数の値を使用してパラメーターを定義します。このセッションでスクリプトを再度開始する場合は、新しい引数を入力するか、引数を省略して古い値を使用できます。
「引数を省略する」部分は、前の呼び出しで設定された位置パラメーターがまだ使用可能であることを意味します。つまり、親スクリプトでも設定する必要があり、元の位置値をオーバーライドすることしかできません。また、少し誤解を招く可能性がありますSTART
。スクリプトをもう一度実行して、その間に異なるパラメーターを指定して別のスクリプトを実行した場合、その言葉遣いから期待するのと同じ古い値を取得することはできません。がr3.sql
ミックスに投入され、次のr1.sql
ように修正されました。
prompt script r1 : &1
@r2 xxx
prompt script r1 : &1
@r3 yyy
prompt script r1 : &1
@r2
prompt script r1 : &1
...ドキュメントの文言は、 への2回目の呼び出しでr2
も が表示されることを意味しますxxx
が、もちろんそうではありません:
script r1 : bla
script r2 : xxx
script r1 : xxx
script r3 : yyy
script r1 : yyy
script r2 : yyy
script r1 : yyy
r2
サブシェルに相当するもので実行するという概念はありません。スクリプトは、シェルスクリプトに含まれるファイルのように、所定の場所に読み込まれます.
。位置 (または関連する場合は名前付き) パラメーターはDEFINE
再び d になるため、スコープはありません。バインド変数も同じように動作します。START
で別のスクリプトを呼び出す場合と、その内容をメイン スクリプトに埋め込むだけの場合とでは、動作に違いはありません。
渡された位置変数のみが再定義されることにも注意してください。そのため、より少ないパラメーターで内部スクリプトを呼び出すと、元の変数の一部が保持されます。効果を確認するためにそれらを参照する必要はありません。実際r2
には空のファイルである可能性があり、次の場合r1
:
prompt script r1 &1 &2
@r2 xxx
prompt script r1 &1 &2
...そして次のように実行します:
sqlplus x/yy @r1 foo bar
...あなたは得る:
script r1 foo bar
script r1 xxx bar
どれもあまり役に立ちませんが、コメントするには長すぎます...
唯一の回避策は、位置パラメーターが割り当てられた各スクリプトで一意の名前の変数を定義することのようですが、それは面倒であり、絶対確実ではありません。