轉:
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