如何解决ORA-00911:无效的字符错误?

时间:2015-01-16 15:58:45

标签: sql oracle toad

我尝试使用SQL执行INSERT Toad for oracle

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语言参考手册。

     

行动:无

我该如何解决?

8 个答案:

答案 0 :(得分:49)

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

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

只是删除注释掉的行会使问题消失,但是如果你还看到了实际的提交,那么你可能会使用错误的方法来运行语句。

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

答案 1 :(得分:6)

从查询内部删除分号(;),反引号(``)等

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我遇到了同样的问题,这是由于行尾。我从另一个文件中复制过。 我把everythng放在同一条线上,然后再将它们分开并且有效。

答案 5 :(得分:1)

我正在使用执行Oracle SQL的第三方程序,但遇到此错误。在int n = snprintf(dest, len, "%d#", 123); dest[n - 1] = dest[n - 2]; dest[n - 2] = '.'; 声明之前,我有一些注释注释,其中包含特殊字符。删除评论即可解决问题。

答案 6 :(得分:1)

删除分号(;)。

在oracle中,当您直接在数据库上运行查询时,是否可以使用分号。但是,当您使用Java运行oracle查询时,必须在末尾删除分号。

答案 7 :(得分:0)

解决此Oracle错误的选项是:

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

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

选项3 当在SQL WHERE子句中使用特殊字符并且该值未用单引号引起来时,将发生此错误。

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

选择*来自供应商 供应商名称=?;