ORA-12899错误,一般在导入Oracle数据时会报,指插入的数据长度超出字段的设置长度,这是由于Oracle字符集不同,汉字占的长度不同造成的,比如中文在ZHS16GBK中占2个字节,在UTF-8中却占3个字节。下面介绍通过修改字符集解决该错,另外可以增加字段长度解决。
查看字符集的方法可以用PL/SQL DEVELOP —->Reports(报告)—->DBA—->NLS Database Parameters,
打开cmd,开始操作
修改数据库字符集为:ZHS16GBK
查看服务器端字符集SQL > select * from Vsqlplus /nolog
SQL>conn / as sysdba
若此时数据库服务器已启动,则先执行 SHUTDOWN IMMEDIATE 命令关闭数据库服务器,
然后执行以下命令:
SQL>shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>STARTUP MOUNT
ORACLE 例程已经启动。
。。。
数据库装载完毕。
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
系统已更改。
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
系统已更改。
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
系统已更改。
SQL>ALTER DATABASE OPEN;
数据库已更改。
(SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
ERROR at line 1:ORA-12721: operation cannot execute when other sessions are active
若出现上面的错误,使用下面的办法进行修改,使用INTERNAL_USE可以跳过超集的检查:)
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
数据库已更改。
SQL>SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>STARTUP
ORACLE 例程已经启动。
。。。
数据库装载完毕。
数据库已经打开。
执行数据导入IMP任务,将不会报类似错误。