一个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 ) ,以后直接调用即可。