电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

ORA-12714错误解决总结


发布日期:2019/9/2
 

目前数据库升级到了 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 nvarcharb_dict定义为kind nvarcharcode 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

上一篇:初学者必读:使用存储过程都有哪些益处

下一篇:如何使用Exp以传输表空间的方式将其导出[1]