【问题标题】:How can I solve ORA-00911: invalid character error?如何解决 ORA-00911:无效字符错误?
【发布时间】:2015-03-15 06:56:46
【问题描述】:

我尝试用Toad for oracle 执行SQL INSERT

INSERT INTO GRAT_ACTIVITY
   (UUID, IP_ADRESS, SEND_MAIL, DATE_CREA, DATE_UPD, CREATOR, CENTER, ETAT, REQUEST)
 VALUES('555-vgd9-pllkd-5513', '172.12.23.130', 'N', SYSDATE, SYSDATE, '1554', 'M18', 'I', 8842);
--COMMIT;

GRAT_ACTIVITY 表结构如下:

CREATE TABLE CASH.GRAT_ACTIVITY
(
  UUID       VARCHAR2(64 BYTE) NOT NULL,
  IP_ADRESS  VARCHAR2(15 BYTE),
  SEND_MAIL  VARCHAR2(1 BYTE),
  DATE_CREA  DATE,
  DATE_UPD   DATE,
  CREATOR    VARCHAR2(4 BYTE),
  CENTER     VARCHAR2(4 BYTE),
  ETAT       VARCHAR2(1 BYTE),
  REQUEST    NUMBER
)

错误信息:

ORA-00911: 无效字符

原因:标识符不能以字母和数字以外的任何 ASCII 字符开头。 $#_ 也可以在第一个之后 特点。用双引号括起来的标识符可以包含任何 双引号以外的字符。替代引号 (q'#...#') 不能使用空格、制表符或回车作为分隔符。对所有人 其他上下文,请参阅 SQL 语言参考手册。

操作:无

我该如何解决?

【问题讨论】:

  • 声明没问题。我似乎记得某些版本的 Toad 被 cmets 混淆了;如果您完全删除注释掉的提交,它会起作用吗?您是作为语句运行还是作为脚本运行?
  • 我使用 SQL Plus(不是 Toad)执行 DDL 和 DML 没有问题。
  • 您是否有可能从使用智能引号的地方(即 MS Word)复制了 SQL?每当它们出现而不是常规引号时,您都会收到此错误。
  • 只需手动重新编写查询。它会报错,因为当您从 Skype 或 Internet 等地方复制查询时,会复制一些额外的空格(或 spl.字符)。而且会报错。
  • F9 拯救了我的一天!

标签: sql oracle toad


【解决方案1】:

您正在执行的语句是有效的。该错误似乎意味着 Toad 将尾随分号作为命令的一部分,当它作为语句的一部分包含时,这确实会导致 ORA-00911 - 因为它是客户端中的语句分隔符,而不是语句本身的一部分.

可能是以下注释掉的行让 Toad (as described here) 感到困惑;或者可能是因为您尝试将所有内容作为单个语句运行,在这种情况下,您可以尝试使用运行脚本命令 (F9) 而不是运行语句 (F5 kbd>)。

仅删除注释掉的行就可以解决问题,但如果您在实际提交中也看到了这一点,那么很可能是您使用了错误的方法来运行语句。

在评论 on this related question 中有更多关于 Toad 如何解析分号的信息,但我对 Toad 不够熟悉,无法详细介绍。

【讨论】:

  • @MichaelS。 - 你的回答比我能提供更多关于 Toad 的运行命令的详细信息,所以它可能很有用,你可以考虑取消删除它 - 我认为它不是偷猎*8-)
  • 我有类似的问题,但在SQL developer 上,我无法解决它,如果可以,请回答这个问题here
【解决方案2】:

从查询中删除分号 (;)、反引号 (``) 等

【讨论】:

  • 从查询中删除 ; 为我解决了这个问题
  • 删除后;从 sql 查询中,它为我修复了。
【解决方案3】:

去掉分号(;)。

在 oracle 中,当您直接在 DB 上运行查询时,您可以使用或不使用分号。但是当你使用 java 运行 oracle 查询时,你必须在末尾删除分号。

【讨论】:

    【解决方案4】:

    我正在使用执行 Oracle SQL 的第 3 方程序,我遇到了这个错误。在SELECT 声明之前,我有一些包含特殊字符的注释注释。删除 cmets 解决了这个问题。

    【讨论】:

      【解决方案5】:

      如果在列名或表名中使用了 $、_ 和 # 以外的特殊字符,则该名称必须用双引号引起来。 Link

      【讨论】:

      • 从问题中的 DDL 和 DML 来看,这里不是这样。
      • @erakm 我没有使用任何特殊字符
      • 想想我在回答中写的同一个链接中的 Option-2。选项 2:如果您从另一个程序将 SQL 粘贴到您的编辑器中,则可能会发生此错误。有时可能存在不可打印的字符。在这种情况下,您应该尝试重新键入 SQL 语句,然后重新执行它。
      • 仍然是提供有用的重点上下文的有效答案,以防万一
      【解决方案6】:

      我最近遇到了同样的事情。这只是由于将脚本从文档复制到 sql 开发人员时的空格。我不得不删除空格并运行脚本。

      【讨论】:

        【解决方案7】:

        我遇到了同样的问题,这是由于行尾造成的。我是从另一个文件中复制的。 我将所有内容放在同一行,然后再次拆分它们,它起作用了。

        【讨论】:

          【解决方案8】:

          解决此 Oracle 错误的选项有:

          选项 #1 当您尝试在 SQL 语句中使用特殊字符时会发生此错误。如果列名或表名中使用了 $、_ 和 # 以外的特殊字符,则该名称必须用双引号引起来。

          选项 #2 如果您从另一个程序将 SQL 粘贴到编辑器中,则可能会出现此错误。有时可能存在不可打印的字符。在这种情况下,您应该尝试重新键入 SQL 语句,然后重新执行它。

          选项 #3 当 SQL WHERE 子句中使用特殊字符且值未用单引号括起来时,会出现此错误。

          例如,如果您有以下 SQL 语句:

          从供应商中选择 * WHERE 供应商名称 = ?;

          【讨论】:

            猜你喜欢
            • 2013-02-18
            • 1970-01-01
            • 1970-01-01
            • 2014-05-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-20
            相关资源
            最近更新 更多