各位大侠好,小弟最近在研究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怎么确定。。
跪谢了,这几个周六,周日都得加班度过了。。伤不起。。
在存储过程中,用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怎么确定。。
跪谢了,这几个周六,周日都得加班度过了。。伤不起。。
程序员你伤不起呀。。