将带双引号的字符串插入表中

时间:2013-02-02 09:53:37

标签: sql oracle

我正在使用Oracle 10g,我在将带双引号的字符串插入表时遇到问题。这是我的陈述

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

上述查询失败,错误“此处不允许使用Oracle列”

如果我将双引号更改为单引号,则如下所示,语句成功。

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

但是,我想在表格中插入双引号。

是否可以在insert语句中的字符串中使用双引号?我不想使用REPLACE(),因为我的查询是从数组自动生成的。

3 个答案:

答案 0 :(得分:9)

双引号用于表示quoted identifier,即不仅仅由字母数字字符$#组成的对象名称。另外,建议你使用带引号的标识符。这是您原来的ORA-00984错误的原因。 Oracle假设"tes"是一个列,而不是一个字符串,并且您不能在INSERT语句的as explained in the error message的VALUES子句中使用列名。

为了将字符串 "tes"插入表中,您需要确保它是quoted correctly

  

字符文字用单引号括起来,以便数据库可以将它们与模式对象名称区分开来。

任何字符都可以是字符串的一部分,因此为了在表格中插入双引号,您需要将其括在单引号中。

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

这是一个SQL Fiddle来演示。


还有一点需要注意。您声明此查询是自动生成的,这意味着可能容易受到SQL注入攻击。我强烈建议您阅读Guarding Against SQL Injection中的绑定变量。

答案 1 :(得分:6)

有可能。在Oracle中,您使用单引号引用字符串文字。

如果要将test插入数据库,则必须将其引用为'test'

INSERT INTO USERS (NAME) VALUES ('test');

如果要将"test"插入数据库,则必须将其引用为'"test"'

INSERT INTO USERS (NAME) VALUES ('"test"');

答案 2 :(得分:5)

尝试将值包装在单引号内。

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