12

Oracle 10gを使用していますが、二重引用符付きの文字列をテーブルに挿入する際に問題が発生します。これは私の声明です

INSERT INTO USERS (ID, NAME, USERNAME) VALUES (NULL, "tes", "hello");

上記のクエリは、「Oracle列はここでは許可されていません」というエラーで失敗します。

以下のように、二重引用符を一重引用符に変更すると、ステートメントは成功します。

INSERT INTO USERS (ID, NAME, USERNAME) VALUES (NULL, 'tes', 'hello');

ただし、テーブルに二重引用符を挿入したいと思います。

挿入ステートメントの文字列に二重引用符を付けることは可能ですか?クエリは配列から自動的に生成されるため、REPLACE()は使用しません。

4

3 に答える 3

17

二重引用符は、引用符で囲まれた識別子、つまり英数字だけで構成されていないオブジェクト名、$およびを示すために使用されます#。余談ですが、引用符で囲まれた識別子は使用しないことをお勧めします。これが、元のORA-00984エラーの理由です。"tes"Oracleは、これが文字列ではなく列であると想定しており、エラーメッセージで説明されているように、INSERTステートメントのVALUES句で列名を使用することはできません。

文字列 をテーブルに挿入するには、文字列が正しく引用され"tes"ていることを確認する必要があります。

文字リテラルは、データベースがスキーマオブジェクト名と区別できるように、一重引用符で囲まれています。

任意の文字を文字列の一部にすることができるため、テーブルに二重引用符を挿入するには、それを一重引用符で囲む必要があります。

insert into users (id, name, username) 
values (null, '"tes"', '"hello"');

これがデモンストレーションするSQLフィドルです。


注意すべきもう1つのこと。このクエリは自動的に生成されると述べています。つまり、SQLインジェクションに対して脆弱である可能性があります。Guarding AgainstSQLInjectionのバインド変数について読むことを強くお勧めします。

于 2013-02-02T12:13:04.787 に答える
5

値を一重引用符で囲んでみてください。

INSERT INTO USERS (ID, NAME, USERNAME) VALUES (NULL, '"tes"', '"hello"');
于 2013-02-02T10:04:30.630 に答える