我正在使用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(),因为我的查询是从数组自动生成的。
答案 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"');