web-dev-qa-db-ja.com

「&」を含む文字列を挿入する方法

&文字を含むinsertステートメントを作成するにはどうすればよいですか?たとえば、データベースの列に「J&J Construction」を挿入したい場合。

違いがあるかどうかはわかりませんが、Oracle 9iを使用しています。

37
Andrew Hampton

私はこれを忘れ続け、また戻ってきます!最善の答えは、これまでに提供された回答の組み合わせだと思います。

まず、&はsqlplus/sqldeveloperの変数プレフィックスであるため、問題になります-出現した場合、変数名の一部であると予想されます。

SET DEFINE OFFは、sqlplusの解釈とこの方法を停止します。

しかし、sqlplus変数and literal&charactersを使用する必要がある場合はどうでしょうか?

  • 変数を機能させるにはSET DEFINE ONが必要です
  • そして、&の使用をエスケープするには、ESCAPE ONを設定します。

例えば.

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 '#'
58
tardate

SQLPLUSから使用している場合

SET DEFINE OFF  

踏むのをやめる、特別な場合として

16
hamishmcn

別の解決策として、連結とchr関数を使用します。

select 'J' || chr(38) || 'J Construction' from dual;
10
C. J.

正しい構文は

set def off;
insert into tablename values( 'J&J');
5
Greg Ogle

ASCIIコードを文字列に変換するchr()関数が常にあります。

すなわち。 INSERT INTO table VALUES(CONCAT( 'J'、CHR(38)、 'J'))のようなもの

5
Hans
4
hamishmcn

プログラムでは、常にパラメーター化されたクエリを使用します。 SQLインジェクション攻撃や、SQLパーサーに特有のその他の文字を回避します。

4
Mike Dimmick
INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')

このクエリの出力:Jonhy's Sport&Fitness

2
aemre

次のオプションのいずれかを使用すると動作することがわかりました。

SET DEF OFF

または

SET SCAN OFF

データベースについては、一方が他方より優れているか「より適切」であるかを知るのに十分ではありません。また、これらのいずれかよりも良いものがある場合は、お知らせください。

2
Andrew Hampton

'J' || '&' || 'Construction'のような文字列を挿入できます。正常に動作します。

insert into table_name (col_name) values('J'||'&'||'Construction');
2
lokesh kumar

Sql plusを使用している場合は、コマンドを発行する必要があると思います

SET SCAN OFF
0
stjohnroe
SET ESCAPE ON;
INSERT VALUES("J\&J Construction") INTO custnames;

(テストされていません。手元にOracleのボックスはありません。しばらくお待ちください)

0
Roel

SQL/Plusの使用をやめてください。 PL/SQL Developer これはSQLツール以上のものです。

追伸 [〜#〜] toad [〜#〜] を好む人もいます。

0

アンドリュー:

"J&J Construction"

SELECT CONCAT('J', CONCAT(CHR(38), 'J Construction')) FROM DUAL;
0