12

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

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

上面的查询失败并出现错误"Oracle column not allowed here"

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

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

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

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

4

3 回答 3

17

双引号用于表示带引号的标识符,即不完全由字母数字字符$和组成的对象名称#。顺便说一句,建议您不要使用带引号的标识符。这就是您原来的 ORA-00984 错误的原因。Oracle 假设它"tes"是一列,而不是字符串,并且您不能在 INSERT 语句的 VALUES 子句中使用列名,如错误消息中所述

为了将字符串 "tes"插入表中,您需要确保正确引用它:

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

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

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

这是一个要演示的SQL Fiddle 。


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

于 2013-02-02T12:13:04.787 回答
11

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

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

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

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

INSERT INTO USERS (NAME) VALUES ('"test"');
于 2013-02-02T10:00:17.230 回答
5

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

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