Oracleでスクリプトを見ていますが、認識できないものが表示されます
REM INSERTING into database1."Users"
SET DEFINE OFF;
Insert into database1."Users" ("id","right") values ('1','R');
「set define off」に関するドキュメントを探しています。文字通り「コマンドの解析を無効にして、置換変数をその値に置き換えます」と書いています。
私は彼らが言いたいことを本当に理解していません。
誰も私を助けることができますか?
デフォルトでは、SQL Plusは「&」を置換文字列を開始する特殊文字として扱います。これは、他の理由で「&」を含むスクリプトを実行するときに問題を引き起こす可能性があります。
SQL> insert into customers (customer_name) values ('Marks & Spencers Ltd');
Enter value for spencers:
old 1: insert into customers (customer_name) values ('Marks & Spencers Ltd')
new 1: insert into customers (customer_name) values ('Marks Ltd')
1 row created.
SQL> select customer_name from customers;
CUSTOMER_NAME
------------------------------
Marks Ltd
スクリプトに '&'文字を含むデータが含まれている(または含まれている)ことがわかっていて、上記のような置換動作が必要ない場合は、set define off
を使用してスクリプトの実行中に動作をオフにします。
SQL> set define off
SQL> insert into customers (customer_name) values ('Marks & Spencers Ltd');
1 row created.
SQL> select customer_name from customers;
CUSTOMER_NAME
------------------------------
Marks & Spencers Ltd
スクリプトの最後にset define on
を追加して、デフォルトの動作に戻すことができます。
以下に例を示します。
SQL> set define off;
SQL> select * from dual where dummy='&var';
no rows selected
SQL> set define on
SQL> /
Enter value for var: X
old 1: select * from dual where dummy='&var'
new 1: select * from dual where dummy='X'
D
-
X
set define off
を使用して、&var
値を持つ行を取得し、ユーザーに値を入力するように促し、&var
を入力した値(この場合はX
)に置き換えました。