当前位置: 代码迷 >> PB >> ,pb9怎么防止截取中文字段截半个字符的有关问题
  详细解决方案

,pb9怎么防止截取中文字段截半个字符的有关问题

热度:91   发布时间:2016-04-29 08:00:17.0
求助,pb9如何防止截取中文字段截半个字符的问题?
一个oracle的表,字段为 DHHM ,VARCHAR2类型 30 位

string ls_str='13511156802/15111117163(杨琴花)'

len(ls_str) 返回33位,超过数据库字段定义的长度了,于是
用left(ls_str,30) 由于后面是双字节长度,会截留汉字的一般,这样存储的时候
oracle报错,错误信息是: ORA-12571 -- 包写入失败

可以使用leftw()函数,但是lenw(ls_str)返回28 ,数据库字段也存放不下,用leftw(ls_str,????)--这个用多少位数呢?
有什么办法呢?

------解决方案--------------------
select parameter,value from v$nls_parameters where parameter='NLS_CHARACTERSET'; 

看oracle的字符集,应该和pb这边关系不大。
------解决方案--------------------
用len(ls_str)函数来判断是否能不截断就存到数据库。如果超长,就用ls_str=leftw(ls_str,lenw(ls_str) - 1)来截取,反复截取和判断,直到满足要求为止。

可以把这一段程序作成一个函数 string f_strcut(string ls_str , long ll_limit ) ,以后直接调用即可。
  相关解决方案