oracle结果集已耗尽_oracle字符串函数

oracle结果集已耗尽_oracle字符串函数最近修改oracle触发器,在过程中遇到两个问题:selectlastnamefromhrmresourcewhereidin(waigaunyanshourens);此sql只要功能:根据id到人力资源表找相应的人名;此处waigaunyanshourens是一个存储外观验收人变量;原只是一个存储外观验收人的id变量,现在界面要求外观验收人可以多选,如(41,42,43);现在问题…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最近修改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.net/192977.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 此工作站和主域间的信任关系失败 又一解决办法_电脑加域后无管理员

    此工作站和主域间的信任关系失败 又一解决办法_电脑加域后无管理员某虚拟化的域控制器出现严重故障以至于不可修复,故使用之前Hyper-V中导出的备份恢复了域控制器。恢复后基本功能正常,但部分工作站登录时提示“此工作站和主域间的信任关系失败”。【解决方案】0、必须确保故障工作站没有其他的问题(如网络连接故障、DNS设置错误等);1、在不能登录域的工作站上,使用工作站本地的管理员用户登录系统;2、在工作站上打开powershell,输入Reset…

    2022年10月19日
    3
  • Centos7.2安装Nginx实现负载平衡

    Centos7.2安装Nginx实现负载平衡

    2022年2月23日
    45
  • 网络抓包工具哪个好_常见抓包工具

    网络抓包工具哪个好_常见抓包工具点击上方“民工哥技术之路”选择“星标”每天10点为你分享不一样的干货一、概述无论是开发还是测试,在工作中经常会遇到需要抓包的时候。本篇博客主要介绍如何在各个平台下,高效的抓包。目前的抓包软件总体可以分为两类,一种是设置代理抓取http包,比如Charles、mitmproxy这些软件。另一种是直接抓取经过网卡的所有协议包,其中最出名就是大名鼎鼎的wireshark以及linux自带的抓包软件tcp…

    2022年4月20日
    35
  • windows启动tomcat闪退

    windows启动tomcat闪退现象:windows下双击tomcat\bin\startup.bat时闪退原因:缺少环境变量导致解决方法:打开编辑tomcat\bin\startup.bat,头部加入以下代码,一个是JAVA目录,一个是Tomcat目录SETJAVA_HOME=C:\ProgramFiles\Java\jdk1.6.0_39SETTOMCAT_HOME=D:\hunk\work\apache-tomcat

    2022年5月30日
    59
  • 有什么办法可以实时监控微信_微信被监控有什么特征

    有什么办法可以实时监控微信_微信被监控有什么特征如何同步员工微信聊天记录,员工微信监控管理?这就教你如何操作!企业员工微信怎么更好管理?如何微信监控聊天记录?工作手机管理系统实现员工企业微信聊天全程记录,敏感行为词全程监控,敏感行为监督,私单,飞

    2022年8月6日
    5
  • java过滤器的顺序(java过滤器指定过滤文件)

    过滤器的顺序由web.xml文件中<filter-mapping>的顺序决定,从上到下现有三个过滤器<filter><filter-name>AFilter</filter-name><filter-class>com.jerry.filter.AF

    2022年4月12日
    153

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号