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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 浅谈VB.NET[通俗易懂]

    浅谈VB.NET[通俗易懂]浅谈VB.NET

    2022年4月24日
    38
  • fckeditor的配置方法

    fckeditor的配置方法本文章借鉴的是:马千里的博客今天早晨用了一点时间找了一个开源的富文本编辑器,我之前一直用一个很简单的,受限于功能,复用性一直不好,每次重建一个网站都需要用非常多的时间来处理,比较繁琐。在这里记录一下

    2022年7月3日
    15
  • 如何设置pycharm字体大小_pycharm设置字体颜色

    如何设置pycharm字体大小_pycharm设置字体颜色pycharm是很好的一个IDE,在windows下,和macOS下,都能很好的运行。唯一缺点是启动慢。默认字体太小,在mac下,需要瞪大24K氪金狗眼才能看清。为了保护好眼睛,我们需要把字体调整大一些: 步骤:Settings–>Editor–>ColorsScheme–>ColorSchemeFont然后在size那里调整。Linespa…

    2022年8月29日
    1
  • 编程体系结构(08):Spring.Mvc.Boot框架

    编程体系结构(08):Spring.Mvc.Boot框架

    2020年11月20日
    238
  • webstorm2021激活码(JetBrains全家桶)

    (webstorm2021激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月21日
    149
  • 基类和派生类

    基类和派生类1.什么是基类?在面向对象设计中,被定义为包含所有实体共性的class类型,被称为“基类”。-百度百科简单理解,即父类(相对派生类)2.什么是派生类?利用继承机制,新的类可以从已有的类中派生。

    2022年8月4日
    4

发表回复

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

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