1. ホーム
  2. oracle

[解決済み】Oracle Databaseで「SET DEFINE OFF」を使用するタイミングと理由

2022-02-20 20:44:18

質問

OracleのScriptを見ていると、見覚えのないものが表示される。

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 をスクリプトの最後に追加すると、デフォルトの動作に戻ります。