ORA-00911: invalid character 錯誤解決集錦


 

轉:

ORA-00911: invalid character 錯誤解決集錦

參考https://www.linuxidc.com/Linux/2017-05/144361.htm

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

本篇文章來源於 Linux公社網站(www.linuxidc.com)  原文鏈接:https://www.linuxidc.com/Linux/2017-05/144361.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM