ORA-01756報錯的解決方案

Hoegh發表於2017-09-14
今天在嘗試執行一個包含中文字元的指令碼時,出現以下報錯:"ora-01756:quoted string not properly terminated"。

檢查指令碼後,沒有發現引號不匹配等常見問題;複製其中報錯的語句到sqlplus環境下執行沒有報錯。綜上,初步斷定和資料庫字符集有關係。

問題排查:

1.檢視Linux系統環境變數


[root@localhost Desktop]# echo $NLS_LANG
SIMPLIFIED CHINESE_CHINA.ZHS32GB18030
[root@localhost Desktop]#

2.檢視資料庫的userenv

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8

SQL>

3.檢視資料庫的NLS_LANG

SQL> show parameter NLS_LANG

NAME TYPE VALUE
------------------------------------ -------------------------------------------- ------------------------------
nls_language string SIMPLIFIED CHINESE
SQL>

我們發現資料庫的字符集和Linux設定的字符集不一致。接下來,我們需要修改Linux的字符集,和資料庫字符集保持一致。

解決方案:

修改root使用者和oracle使用者下.bash_profile中的NLS_LANG設定,以root使用者為例,修改方法如下:

1.修改~/.bash_profile中的NLS_LANG設定。

[root@localhost Desktop]# vim ~/.bash_profile


if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS32GB18030"
umask 022


將紅色部分改為:

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"


2.重新載入修改後的.bash_profile檔案

[root@localhost oracle]#source ~/.bash_profile


注意:

修改配置後強烈建議重啟作業系統


 
~~~~~~~ the end~~~~~~~~~
hoegh
2017.09.14

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-2144974/,如需轉載,請註明出處,否則將追究法律責任。

相關文章