我正在使用Oracle 10g,在向表中插入带双引号的字符串时遇到问题。
INSERT INTO USERS (ID, NAME, USERNAME) VALUES (NULL, "tes", "hello");
上述查询失败,并显示错误 “此处不允许使用Oracle列”。
如果我将双引号改为单引号,如下所示,语句成功。
INSERT INTO USERS (ID, NAME, USERNAME) VALUES (NULL, 'tes', 'hello');
但是,我想在表中插入双引号。
我不想使用REPLACE(),因为我的查询是从一个数组自动生成的。
3条答案
按热度按时间mbjcgjjk1#
双引号用于表示带引号的标识符,即不完全由字母数字字符组成的对象名称,
$
和#
。顺便说一句,建议您 * 不要 * 使用带引号的标识符。这就是原始ORA-00984错误的原因。Oracle假设"tes"
是列,而不是字符串,并且不能在INSERT语句的VALUES子句中使用列名as explained in the error message。为了将 string
"tes"
插入到表中,您需要确保它被正确引用:字符文本用单引号引起来,以便数据库可以将它们与架构对象名称区分开来。
任何字符都可以是字符串的一部分,所以为了将双引号插入到表中,您需要将其包含在单引号中。
这里有一个SQL Fiddle来演示。
还有一件事要注意。你说这个查询是自动生成的,这意味着你 * 可能 * 容易受到SQL注入的攻击。我强烈推荐阅读关于绑定变量的防范SQL注入。
7ajki6be2#
在Oracle中,字符串文字用单引号引起来。
如果你想把
test
插入到数据库中,那么你必须把它引用为'test'
。如果你想把
"test"
插入到数据库中,那么你必须把它引用为'"test"'
。ztmd8pv53#
尝试将值括在单引号内。