`
Fangrn
  • 浏览: 800752 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle function中如何处理长度超过varchar2存储长度的字符串

阅读更多

比如有如下函数,拼接字符串:

CREATE OR REPLACE Function translate_order_right_user_fun (
activity_instance_id_ in varchar2 default ''
) RETURN varchar2 IS
return_value varchar2(4000):='';


str_length number;
workitem_tmp wfs_workitem%ROWTYPE;
CURSOR mycur is select * from wfs_workitem w where w.activity_instance_id=activity_instance_id_ order by w.assit_order;
BEGIN

open mycur;
LOOP
FETCH mycur INTO workitem_tmp;
EXIT WHEN mycur%NOTFOUND;
return_value:=(return_value||('{WORKITEM_ID:"'||workitem_tmp.WORKITEM_ID|| '",USER_ID:"'||workitem_tmp.user_id ||'",FINISH_FLAG:"'||workitem_tmp.finish_flag|| '",ASSIT_ORDER:"'||workitem_tmp.assit_order||'"},'));
END LOOP;
CLOSE mycur;
SELECT length(return_value) into str_length FROM DUAL;
select substr(return_value,1,str_length-1) into return_value from dual;
RETURN return_value;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error   ---------------' || sqlcode ||   '     :       ' || sqlerrm);
END;

 在数据量小的时候没有问题,但是如果拼接出来的字符串超过了varchar2存储的长度之后,函数就会报错,怎么办,其实在这我们可以用clob类型,直接使用!

CREATE OR REPLACE Function translate_order_right_user_fun (
activity_instance_id_ in varchar2 default ''
) RETURN clob IS
return_value clob:='';


str_length number;
workitem_tmp wfs_workitem%ROWTYPE;
CURSOR mycur is select * from wfs_workitem w where w.activity_instance_id=activity_instance_id_ order by w.assit_order;
BEGIN

open mycur;
LOOP
FETCH mycur INTO workitem_tmp;
EXIT WHEN mycur%NOTFOUND;
return_value:=(return_value||('{WORKITEM_ID:"'||workitem_tmp.WORKITEM_ID|| '",USER_ID:"'||workitem_tmp.user_id ||'",FINISH_FLAG:"'||workitem_tmp.finish_flag|| '",ASSIT_ORDER:"'||workitem_tmp.assit_order||'"},'));
END LOOP;
CLOSE mycur;
SELECT length(return_value) into str_length FROM DUAL;
select substr(return_value,1,str_length-1) into return_value from dual;
RETURN return_value;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error   ---------------' || sqlcode ||   '     :       ' || sqlerrm);
END;

 执行发现没有任何问题了。

 

 

分享到:
评论

相关推荐

    灵活截取字符串

    对于截取字符串,Oracle中有两个函数substr(),instr()截取规则的字符串使用起来较为方便,这里重新封装了一个函数 --调用函数参数说明: --num_char(str1 varchar2,str2 varchar2,indexs number) --str1 原字符串 --...

    Oracle P/L SQL实现文件压缩、解压功能

    Oracle P/L SQL实现文件压缩、解压功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 Create or Replace Package UTL_ZIP AUTHID CURRENT_USER as Type File_List is Table of Clob; -...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...

    Oracle P/L SQL实现发送Email、浏览网页等网络操作功能

    as_SourceStr in Varchar2 --需要加密的字符串 ) Return Varchar2; --将Email地址去头去尾,剩下最简单的Email地址,如"TSI Customer Service" 变成cs@csdn.com Function f_GetNakedEmailAddr( as_...

    oracle 函数判断字符串是否包含图片格式的实例代码

    首先是写一个分割字符串的函数,返回table类型 CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_str_split IS j INT := 0; i INT := 1; len INT := 0; len1 INT...

    Oracle截取JSON字符串内容的方法

    Oracle截取JSON字符串内容 ,具体代码如下所示: CREATE OR REPLACE FUNCTION PLATFROM.parsejsonstr(p_jsonstr varchar2,startkey varchar2,endkey varchar2) RETURN VARCHAR2 IS rtnVal VARCHAR2(1000); ...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...

    orcale常用命令

    例:将test表中的Count列宽度加长为10个字符 sql>alter atble test modify (County char(10)); b、将一张表删除语句的格式如下: DORP TABLE 表名; 例:表删除将同时删除表的数据和表的定义 sql>drop table ...

    Oracle8i_9i数据库基础

    §1.5.5 Change(替换字符串)命令 34 §1.5.6 Append(追加字符串)命令 34 §1.5.7 Save保存当前缓冲区命令到文件 35 §1.5.8 GET将命令文件读到缓冲区 35 §1.5.9 SPOOL将信息记录到文件中 36 §1.5.10 再运行当前...

    Oracle日期与时间拼接函数以及时间处理函数

    Oracle日期与时间拼接函数以及时间处理函数- -干货 1.时间处理函数 在工作过程中是否有遇到源数据的时间存储为Integer类型的...CREATE OR REPLACE FUNCTION DATE_SPLICING_SECEND (SECONDS INTEGER)RETURN VARCHAR2 AS

    Oracle事例

    字符串字段中含有\"\\t \\n\",如果用来在c或者c++程序中输出到文件,格式无法保证。 比如:replace(f2,\'\\t\',\'\') <3>.清除换行和回车 比如: replace(f2,chr(13)||chr(10),\'\') 23、如何在字符串里加回车...

    PL/SQL Developer8.04官网程序_keygen_汉化

     varchar2 用来存储变长的字符串,其使用语法为: varchar2[(size)] 其中size为可选,表示该字符串所能存储的最大长度。 在PL/SQL中声明变量与其他语言不太一样,它采用从右往左的方式声明,比如声明一个number类型...

    mysql数据库的基本操作语法

    空字符串“”是不等于null,0也不等于null create table temp( id int not null, name varchar(255) not null default ‘abc’, sex char null ) 上面的table加上了非空约束,也可以用alter来修改或增加非空约束 ...

    PLSQLDeveloper下载

    varchar2 用来存储变长的字符串,其使用语法为: varchar2[(size)] 其中size为可选,表示该字符串所能存储的最大长度。 在PL/SQL中声明变量与其他语言不太一样,它采用从右往左的方式声明,比如声明一个number类型...

    精髓Oralcle讲课笔记

    --(将sal的查询结果转化为字符串,与ename连接到一起,相当于Java中的字符串连接) 7、select ename||'afasjkj' from emp; --字符串的连接 8、select distinct deptno from emp; --消除deptno字段重复的值 9、...

    2009达内SQL学习笔记

    (单引号,引起字符串;双引号,引起别名。起别名有符号,或者区分大小写时,必须用双引号) 多表查询时,可给表起别名。(给列起别名,列<空格>列别名;给表起别名,表<空格>表别名;)。 如:Select first_name ...

    Java学习笔记-个人整理的

    {12.16}char与varchar2}{178}{section.12.16} {12.17}number}{179}{section.12.17} {12.18}\ttfamily user\_tables, user\_objects}{179}{section.12.18} {12.19}truncate}{179}{section.12.19} {12.20}alter}{...

Global site tag (gtag.js) - Google Analytics