【问题标题】:Inserting a string with double quotes into a table将带双引号的字符串插入表中
【发布时间】:2013-01-17 14:43:24
【问题描述】:

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

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

上面的查询失败,错误“这里不允许Oracle列”

如果我把双引号改成单引号,如下语句就成功了。

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

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

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

【问题讨论】:

  • 你需要插入值"tes"对吗?
  • 你试过逃避吗?例如 "\"tes\"" ,它有效吗?

标签: sql oracle


【解决方案1】:

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

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

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

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

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

这里有一个SQL Fiddle 来演示。


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

【讨论】:

    【解决方案2】:

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

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

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

    如果您想将"test" 插入数据库,那么您必须将其引用为'"test"'

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

    【讨论】:

    • 您可以插入任何字符,但必须在它们周围使用单引号。
    • Jeffrey,我知道可以将任何引用作为文本插入到数据库中。但是不能使用双引号作为字符串的分隔符。
    【解决方案3】:

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

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

    【讨论】:

    • 如果我只需要在字符串之间插入一个双引号怎么办?
    猜你喜欢
    • 2017-08-21
    • 2014-09-18
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多