在创建存储过程包的时候报标识符过长问题:
oracle允许的变量最大长度为30个字符,汉字占两个字符,末尾的汉字占一个字符
但是创建名称为"DEF_AAE140_商业补充医疗保险"的constant时,报标识符过长
--查看oracle数据库字符集:
select userenv('language') from dual;
--查看oracle数据库的编码
select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';
经排查与oracle字符集编码格式有关,在utf-8中,一个汉字按照3个字节来算,gbk中一个汉字按照2个字节来算。所以上面的字符串会报错,去掉一个汉字即可以正常执行
修改编码集
1.打开dos窗口,以sysdba的身份登录上去
--sqlplus / as sysdba;
2.关闭数据库
sql> shutdown immediate;
3.以mount打来数据库
sql> startup mount;
4.设置session
sql> alter system enable restricted session;
system altered.
sql> alter system set job_queue_processes=0;
system altered.
sql> alter system set aq_tm_processes=0;
5.启动数据库
sql> alter database open;
6.修改字符集
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
sql> alter database character set internal_use UTF8;
7.关闭,重新启动
sql> shutdown immediate; sql> startup;