共计 1272 个字符,预计需要花费 4 分钟才能阅读完成。
ORA-00911: invalid character 错误解决集锦
案例一: 字符集的问题
网上搜了一遍, 大多数是因为分号 (;) 的问题. 而我的 sql 文件是没有分号的, 最后发现是 sql 文件编码和服务器字符集的差异造成
sql 文件怎么都看不出问题, 直到在 UltraEdit 里切换到 16 进制模式下才发现有些怪字符, 文件编码是 UTF-8
然而服务器的字符集是 TH8TISASCII
select userenv(‘language’) from dual
解决办法: 把 sql 文件另存为 ASCII 编码就行了.
案例二: 今天在访问远程 oralce 数据库时,以前正确的语句也都会出现“ORA-00911: invalid character”的错误信息,在网上找了很长时间,也没有找到原因,但在搜索时,看到一篇文章说字符集的问题,我突然想到,我的系统之前恢复过系统,oarcle 客户端也是今天刚安装的,我记得在系统设置中,要设置字符集那个变量,于是我从服务器上看到了该字段,在我本机上果然没有,于是我按照上面的路径把那个变量加上,具体路径和变量名如下:
控制面板 – 系统和安全 — 系统--高级系统设置--高级--环境变量--系统变量中
变量名:NLS_LANG
变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
把这个变量添加完成以后,把系统重启一下就 ok 了,重启以后,错误提示消失了。
这个变量是在读取数据库中中文名称时出现的。
案例三: 今天在写 SQL 查询 Oracle 中的数据时遇到一个问题。在一般的 SQL 查询分析器中写好的 SQL 语句(运行一切正常),扔到用 C# 写的程序中就报错。错误代码如下:
System.Data.OleDb.OleDbException:One or more errors occurred during processing of command.
ORA-00911: invalid character at…
检查了半天,实在是没找到任何 SQL 错误的原因,(本来怀疑是字符转码的问题,后来给排除了);最后,终于在网上查到了答案,原来“都是分号惹的祸”!
我一般写 SQL 的时候都喜欢在每个语句结尾加上 ”:”,我想这也是一般写 SQL 的程序员的习惯。因为很多 SQL 的查询分析其时都会将这个分号当成一个语句的结束。但是,其实在正式执行的时候,是不能将这个分号扔到 Oracle 的解析器中的,因为 Oracle 的语法解析器特别严格,就会报出以上的错误出来,解决方法也很简单,去掉分号就可以了。
以上的问题适用于任何用程序书写的 Oracle 数据查询,看起来有时候习惯也会害死人的。
注:
我是用 C 语言的 OCI 接口调用 sql 语句,sql 语句末尾加了分号。
错误号:911
错误描述:ORA-00911: invalid character
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-05/144361.htm