Oracle自定义函数支持clob转全角半角

今天用Oracle自带函数处理文本全角半角问题的时候,发现自带的函数居然不支持超过4000字clob大字段的处理,如果处理超过4000字的大文本的时候,Oracle会报错

 这个时候呢,我想到了一个办法处理,就是用自定义函数分段处理文本,然后再组合起来返回,然后就可以处理大字段了,函数的第二个参数是可以选择是处理成全角还是处理成半角

MULTI--全角,SINGLE--半角

默认是半角

create or replace function trans_byte(p_data CLOB, p_type varchar2 default 'SINGLE') return clob deterministic is
/*大字段转全角半角函数*/
return_data clob;
base_sql clob;
data varchar2(4000);
i number:= dbms_lob.getlength(p_data);
d_size number :=1000;
trans_type varchar2(64);
begin
  if(p_data is null or i = 0) then
    return return_data;
  end if;
  trans_type :=upper(p_type);
  if(i <= d_size) then
    data:= p_data;
    if('MULTI'= trans_type) then
      select TO_MULTI_BYTE(data) into return_data from dual;
    elsif('SINGLE'= trans_type) then
      select TO_SINGLE_BYTE(data) into return_data from dual;
    end if;
  else
    for loop_index in 1..ceil(i/d_size) loop
      data:=dbms_lob.substr(p_data, d_size, (loop_index-1)*d_size+1);
      if('MULTI'= trans_type) then
        select return_data||TO_MULTI_BYTE(data) into return_data from dual;
      elsif('SINGLE'= trans_type) then
        select return_data||TO_SINGLE_BYTE(data) into return_data from dual;
      end if;
    end loop;
  end if;
  return return_data;
end;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值