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

6ss1mwsb  于 2023-03-29  发布在  Oracle
关注(0)|答案(3)|浏览(403)

我正在使用Oracle 10g,在向表中插入带双引号的字符串时遇到问题。

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

上述查询失败,并显示错误 “此处不允许使用Oracle列”
如果我将双引号改为单引号,如下所示,语句成功。

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

但是,我想在表中插入双引号。
我不想使用REPLACE(),因为我的查询是从一个数组自动生成的。

mbjcgjjk

mbjcgjjk1#

双引号用于表示带引号的标识符,即不完全由字母数字字符组成的对象名称,$#。顺便说一句,建议您 * 不要 * 使用带引号的标识符。这就是原始ORA-00984错误的原因。Oracle假设"tes"是列,而不是字符串,并且不能在INSERT语句的VALUES子句中使用列名as explained in the error message
为了将 string"tes"插入到表中,您需要确保它被正确引用:
字符文本用单引号引起来,以便数据库可以将它们与架构对象名称区分开来。
任何字符都可以是字符串的一部分,所以为了将双引号插入到表中,您需要将其包含在单引号中。

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

这里有一个SQL Fiddle来演示。
还有一件事要注意。你说这个查询是自动生成的,这意味着你 * 可能 * 容易受到SQL注入的攻击。我强烈推荐阅读关于绑定变量的防范SQL注入。

7ajki6be

7ajki6be2#

在Oracle中,字符串文字用单引号引起来。
如果你想把test插入到数据库中,那么你必须把它引用为'test'

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

如果你想把"test"插入到数据库中,那么你必须把它引用为'"test"'

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

ztmd8pv53#

尝试将值括在单引号内。

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

相关问题