各位大侠好,小弟最近在研究oracle的存储过程,遇到这么一个问题
在存储过程中,用json做开发
-- Created on 2011-10-15 by HASHAN 
declare 
  v_json json := json();begin
  v_json.put('name1','hello,world');
  v_json.put('哈山','写oracle存储过程');
  v_json.print;
end;打印输出结果:{
  "name1" : "hello,world",
  "\u54C8\u5C71" : "\u5199oracle\u5B58\u50A8\u8FC7\u7A0B"
}我又写一个函数,将unicode转化成中文  /*===========================================================================
  过程名    : decodeUnicode2CN
  功能      : 将unicode编码格式转换成中文
  输入参数  :text :unicode编码内容              
  输出参数  :中文输出
  =============================================================================*/
  FUNCTION DECODEUNICODE2CN(TEXT IN VARCHAR2) RETURN VARCHAR2 IS
  
    V_SQL       VARCHAR2(32765); --编码转换sql
    TEXT_BUFFER VARCHAR2(32765); --输出中文
  BEGIN
    V_SQL := 'select unistr(REPLACE(''' || TEXT ||
             ''',''\u'',''\'')) from dual ';
    EXECUTE IMMEDIATE V_SQL
      INTO TEXT_BUFFER;
  
    RETURN TEXT_BUFFER;
  END;  调用以后,以上乱码均被解决了,输出结果:
{
  "name1" : "hello,world",
  "哈山" : "写oracle存储过程"
}==================================================================
但是,该函数的变量的buffer太小。。 我们项目的输出内容很大,比如说去营业厅办理宽带,手机,固话等业务,将所有的业务打印输出,这个输出量太大了,包含客户的信息,业务的信息,套餐信息,费用信息,营业厅信息等等。。这么大的量,32767根本不足。。
直接调用的话会报错,变量空间太小,那个sql执行也会报错,同样的错误。。唯一解决的办法,我比较笨,只想到把内容分成N份,分别转换,最终再连接到一块,输出给页面,进行展示。。请问大家有什么好的办法或者建议没? 另外N怎么确定。。
跪谢了,这几个周六,周日都得加班度过了。。伤不起。。