目前数据库升级到了 win字符集为UTF 发现在别人写的过程中总是这段不能编译通过报ORA INSERT INTO b_dict(kind code) SELECT a* FROM THE (SELECT CAST (string_split (code_in ) AS mydicttype) FROM DUAL) a; 其中mydicttype定义为create or replace type myDictType as table of nvarchar()b_dict定义为kind nvarchar()code nvarchar() 函数string_split为拆分字符串 保存在mydicttype类型变量中并返回该变量 但编译时总在a*报Compilation errors for PROCEDURE Error PL/SQL ORA 指定的国家字符集无效 因为用户要求数据库用UTF所有varcharchar全用nvarchar格式我在client直接执行INSERT INTO b_dict(kind code) SELECT a* FROM THE (SELECT CAST (string_split (code_in ) AS mydicttype) FROM DUAL) a是可以的但是放在过程中编译就通不过?奇怪难道还有哪儿的字符集没设置好?盼兄指点迷津 解决方法三种目前只能是mydicttype的类型保留为varchar型 其他程序代码中如union all时常量要在前面加n进行处理如 为n才能修正这些问题往对大家有用 对使用nvarchar的地方加上 to_char( nvarchar 的变量或字段 )对使用varchar的地方加上 to_char( varchar 的变量或字段(nvarchar类型)) 试一下 有时候遇到类似问题我就这样转换一下 SpecifyingtheUSINGCHAR_CSargumentconvertstextintothedatabasecharactersetTheoutputdatatypeisVARCHAR SpecifyingtheUSINGNCHAR_CSargumentconvertstextintothenationalcharactersetTheoutputdatatypeisNVARCHAR Example CREATETABLEt(char_colCHAR() nchar_colnchar()); INSERTINTOt VALUES(HiNBye); SELECT*FROMt; CHAR_COLNCHAR_COL
HiBye Example UPDATEtSET nchar_col=TRANSLATE(char_colUSINGNCHAR_CS); UPDATEtSET char_col=TRANSLATE(nchar_colUSINGCHAR_CS); SELECT*FROMt; CHAR_COLNCHAR_COL
HiHi Example UPDATEtSET nchar_col=TRANSLATE(deoUSINGNCHAR_CS); UPDATEtSET char_col=TRANSLATE(NdeoUSINGCHAR_CS); SELECT*FROMt; CHAR_COLNCHAR_COL
deodeo 表不多的话可以这样 //创建一个新表并把数据转换为varchar createtablenewtbnameasselectcoltranslate(colusingchar_cs)colfromtbname |