&文字を含むinsertステートメントを作成するにはどうすればよいですか?たとえば、データベースの列に「J&J Construction」を挿入したい場合。
違いがあるかどうかはわかりませんが、Oracle 9iを使用しています。
私はこれを忘れ続け、また戻ってきます!最善の答えは、これまでに提供された回答の組み合わせだと思います。
まず、&はsqlplus/sqldeveloperの変数プレフィックスであるため、問題になります-出現した場合、変数名の一部であると予想されます。
SET DEFINE OFFは、sqlplusの解釈とこの方法を停止します。
しかし、sqlplus変数and literal&charactersを使用する必要がある場合はどうでしょうか?
例えば.
set define on
set escape on
define myvar=/forth
select 'back\\ \& &myvar' as swing from dual;
生産物:
old 1: select 'back\\ \& &myvar' from dual
new 1: select 'back\ & /forth' from dual
SWING
--------------
back\ & /forth
別のエスケープ文字を使用する場合:
set define on
set escape '#'
define myvar=/forth
select 'back\ #& &myvar' as swing from dual;
特定のエスケープ文字を設定すると、「SP2-0272:エスケープ文字を英数字または空白にすることはできません」と表示される場合があります。これはおそらく、エスケープ文字がすでに定義されていることを意味し、物事は恐ろしく自己参照的になります。この問題を回避するクリーンな方法は、最初にエスケープをオフにすることです。
set escape off
set escape '#'
SQLPLUSから使用している場合
SET DEFINE OFF
踏むのをやめる、特別な場合として
別の解決策として、連結とchr関数を使用します。
select 'J' || chr(38) || 'J Construction' from dual;
正しい構文は
set def off;
insert into tablename values( 'J&J');
ASCIIコードを文字列に変換するchr()関数が常にあります。
すなわち。 INSERT INTO table VALUES(CONCAT( 'J'、CHR(38)、 'J'))のようなもの
SET SCAN OFFは廃止されました http://download-uk.Oracle.com/docs/cd/B10501_01/server.920/a90842/apc.htm
プログラムでは、常にパラメーター化されたクエリを使用します。 SQLインジェクション攻撃や、SQLパーサーに特有のその他の文字を回避します。
INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')
このクエリの出力:Jonhy's Sport&Fitness
次のオプションのいずれかを使用すると動作することがわかりました。
SET DEF OFF
または
SET SCAN OFF
データベースについては、一方が他方より優れているか「より適切」であるかを知るのに十分ではありません。また、これらのいずれかよりも良いものがある場合は、お知らせください。
'J' || '&' || 'Construction'のような文字列を挿入できます。正常に動作します。
insert into table_name (col_name) values('J'||'&'||'Construction');
Sql plusを使用している場合は、コマンドを発行する必要があると思います
SET SCAN OFF
SET ESCAPE ON;
INSERT VALUES("J\&J Construction") INTO custnames;
(テストされていません。手元にOracleのボックスはありません。しばらくお待ちください)
SQL/Plusの使用をやめてください。 PL/SQL Developer これはSQLツール以上のものです。
追伸 [〜#〜] toad [〜#〜] を好む人もいます。
アンドリュー:
"J&J Construction":
SELECT CONCAT('J', CONCAT(CHR(38), 'J Construction')) FROM DUAL;