oracle结果集已耗尽_oracle字符串函数
最近修改oracle触发器,在过程中遇到两个问题:
select lastname from hrmresource where id in
(waigaunyanshourens);
此sql只要功能:根据id 到人力资源表找相应的人名;
此处waigaunyanshourens
是一个存储外观验收人变量;原只是一个存储外观验收人的id变量,现在界面要求外观验收人可以多选,如(41,42,43);现在问题来了:
(1.)一条sql不可能接收多个结果集;
(2.)我还的返回的是 人名集的字符串,如(人名A,人名B,人名C)
刚开始也认为挺简单的 ,运用游标处理一下就可以了。不过在多次试验后发现解决有点困难
第一种思路:
定义游标:
cursor cur_wgys is select lastname from
hrmresource where id in (waigaunyanshourens);
c_wg cur_wgys%rowtype;
使用游标:
for c_wg in cur_wgys loop
dbms_output.put_line(c_wg.lastname);
waiguanstr := waiguanstr ||’,’|| c_wg.lastname;
end
loop;
dbms_output.put_line(ltrim(waiguanstr,’,’));
这样整体也就解决了这两个问题;在执行触发器的时候都没问题;但在触发时会对这
cursor cur_wgys is select lastname from
hrmresource where id in (waigaunyanshourens);
行,报“无效数字”的错误;
第二种思路:由于第一种思路老是不知道什么原因,也就另寻他路;
select ltrim(max(sys_connect_by_path(lastname,
‘,’)),’,’)
from (select lastname, rownum t from
hrmresource where id
in(waigaunyanshourens) connect by prior t = t – 1 start with t = 1;
此种方法比较简洁;不要要游标;直接就可以接收多个结果集,并且将结果集自动拼接成用逗号隔开的字符串;
运用此种发放正常理解这是没问题的;可是也是这样在第二行报“无效数字”。
综上两种方法:给自己的感觉是这两种方法都是正确的,不过还是哪的细节没注意,导致报错;
寻找原因发现:id类型是INTEGER;而这个waigaunyanshourens(41,42,43)是一个字符串;
现在问题也找出来了,也试了各种方法,最终终于解决了,对此一番折腾,在此记录,共大家参考!!!
第一种解决方法:
定义游标:
cursor cur_wgys is select lastname from
hrmresource where
INSTR( (select ‘,’
|| waigaunyanshouren ||
‘,’ from formtable_main_112
where requestid =
:new.requestid), ‘,’ || TRIM(TO_CHAR(id )) ||
‘,’ ) > 0;
c_wg cur_wgys%rowtype;
使用游标:
for c_wg in cur_wgys loop
dbms_output.put_line(c_wg.lastname);
waiguanstr := waiguanstr ||’,’|| c_wg.lastname;
end loop;
dbms_output.put_line(ltrim(waiguanstr,’,’));
输出结果:
人名A
人名B
人名C
人名A,人名B,人名C
第二种解决方法:
select
ltrim(max(sys_connect_by_path(lastname, ‘,’)),’,’) into
waigaunyanshourens from (select lastname, rownum
t from hrmresource
where INSTR( (select ‘,’
|| waigaunyanshouren ||
‘,’ from formtable_main_112
where requestid =
:new.requestid), ‘,’ || TRIM(TO_CHAR(id )) ||
‘,’ ) >
0) connect by prior t = t – 1 start with t = 1;
dbms_output.put_line(waigaunyanshourens||’==============’);
输出结果:人名A,人名B,人名C==============
这样就解决了where id in (string)的问题
关键就是where后面这句话,看似挺长挺乱的,不过就是一个类似一个 like,但绝对比like更安全高效;
问题解决心情舒畅,在此总结一下。希望能给遇到同样问题的朋友点帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192977.html原文链接:https://javaforall.cn
相关文章
- Oracle字符串合并实现高效操作(oracle字符串合并)
- 使用Oracle实现字符串不包含的功能(oracle字符串不包含)
- 利用Oracle组函数实现数据处理(oracle的组函数)
- 解析 Oracle 中最小值函数的使用(oracle最小值函数)
- 利用Oracle的乘法函数计算乘积(oracle乘法函数)
- Oracle中时间类型转换为字符串(oracle时间转字符串)
- 利用 Oracle 时间字符串获取准确时间(oracle时间字符串)
- Oracle 认证学习指南(oracle认证教材)
- 深入:Oracle数据库触发器类型(oracle触发器类型)
- 重新缓解Oracle缓存压力(oracle刷新缓存)
- 优化Oracle查询:掌握子查询技巧(oracle子查询优化)
- 如何优化Oracle函数返回值(oracle函数返回值)
- Oracle入门篇:一个高效学习的开始(oracle入门培训)
- Oracle函数存储过程:优化SQL语句常用技巧(oracle函数存储过程)
- Oracle面试题与答案详解(oracle面试题及答案)
- Oracle实现精准度高,效率优先全局函数的使用(oracle 全局函数)
- 复警惕Oracle入库数据可能存在重复(oracle入库数据有重)
- 利用Oracle精确测算年龄(oracle准确计算年龄)
- Oracle使用MD5函数安全性加强(md5函数 oracle)
- A5SQL结合Oracle实现数据库一体化管理(a5sql oracle)
- Oracle中解决乱码问题的技巧(oracle中显示乱码)
- 操作Oracle中掌握字符串IN操作的技巧(oracle中字符串in)
- Oracle中实现多行字符串拼接的方法(oracle中多行拼接)
- Oracle中建立利用函数的完美之作(oracle中函数建立)
- Oracle中利用MD5函数安全处理数据(oracle中md5函数)
- Oracle上海校园招聘来找到梦想的职业吧(oracle上海校招)
- 利用Oracle移除字符串中多余空格(oracle、去处空格)
- Oracle和PHP完美配合提升数据库性能(oracle php配置)