Pl-sql コマンド プロンプトからコマンドを実行して、複数の行を 1 つずつ挿入し、ステートメントを何度も書き直すことなく&
、次の図に示すように演算子を使用できます。
同じ目的でGUIメソッドを使用した場合:
、下の図に示すように、演算子
を使用する必要があります
今私の質問は-> &
GUI で operator を使用できない理由です。使用した場合、エラーが発生します。
&
operator はバインディング メソッドではありません - それはsubstitution variable
. 使用範囲が全然違います。このような:
18:46:18 TEST@oars_sandbox> accept table_name char prompt "enter table name > "
enter table name > dual
18:46:42 TEST@oars_sandbox> select * from &table_name
18:46:47 2 /
D
-
X
基本的に、sql*plus (使用しているコマンド ライン ツール) は、実行時にスクリプト本体のこれらの変数をそれらの値に置き換えます。これにより、スクリプトの設計に大きな柔軟性がもたらされます。たとえば、sql*plus スクリプト (または匿名の pl/sql ブロックでさえも) のロジックをその場で変更できます。たとえば、スプール ファイルにファイル名を割り当てる方法は次のとおりです。
col filename noprint new_value spool_file
select '&spoolpath\'
|| to_char(sysdate, 'yyyymmdd_hh24mi')
||'_'|| '&_user'
||'_'|| '&_connect_identifier'
||'_'|| '&mysid'
|| '.log' as filename
from dual;
set termout on
prompt spooling to &spool_file
spool "&spool_file" replace
変数をバインドする方法はどちらも SQL エンジンの一部ではありません。どちらもクライアントで便利です。クライアントが異なれば、便利な機能も異なります。
「Pl-sql コマンド プロンプト」と呼ばれるものは、そのようなものではありません。これはクライアント ツールSQL*Plus のプロンプトであり、手続き型言語 PL/SQL のようなデータベースの一部ではありません。
使用している他のツールは、APEX の SQL ワークシートのように見えます。私が推測するなら、彼らは「&」ではなく「:」を選択したと思います。なぜなら、それは何年も後に開発され、当時はより自然な選択に見えたからです。Oracle Express Edition との Apex インターフェースは、SQL*Plus との後方互換性を持たないように、シンプルでクリーンになるように設計されています。
あなたが遭遇したのは、SQLplus (および同じ拡張機能を実装するツール) のテキスト置換メカニズムです。
あなたはそれをオフにすることができます:
SET DEF OFF
または、別の文字 (この例ではプラス記号) に切り替えることができます。
SET DEF +
あなたが使用している Oracle ツールは、私の知る限り、SQLplus 拡張機能を実装していません。しかし、SQL Developer (Oracle の無料の GUI ツール) はそうです。