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更安全高效;

问题解决心情舒畅,在此总结一下。希望能给遇到同样问题的朋友点帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192977.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Edge breaker记录

    Edge breaker记录和代码相关性非常强的是这篇文章,几乎就是伪代码了:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.58.7918&rep=rep1&type=pdf一、Compression阶段命令参数为umbrellla_times4.offB第一个参数就是输入网格,目前支持OFF和OVTable两种文件格式,这里…

  • SpringMVC面试题及答案

    SpringMVC面试题及答案SpringMVC面试题及答案1、简单介绍下你对springMVC的理解?SpringMVC是一个实现了MVC设计模式的轻量级Web框架,其核心是Model,View,Controller,把复杂的web应用分成逻辑清晰的几部分,简化开发。2、SpringMVC执行流程是什么?1、用户发送请求至前端控制器DispatcherServlet。2、前端控制器收到请求调用处理器映射器HandlerMapping。3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器并返回给前端控制器。4

  • 罗技craft键盘使用方法_罗技g105键盘说明书

    罗技craft键盘使用方法_罗技g105键盘说明书引言:本文旨在为大家(程序员)快速入门罗技craft键盘,因为网上关于craft的测评缺乏深度,根本触及不到我的灵魂深处1.开箱咋样,是不是帅的雅痞?2.入门刚回来的几个小时,由满怀喜悦,到笑容逐渐凝固,再到内心毫无波澜,到最后奔溃后狂按键盘想退货。说起来,均是处于自己的无知。【因为此货用了京东白条六期】2.1软件下载记住了,安装完之后打开软件,千万千万别更新,别更新,别更新。——点击跳过就好了。因为有master2S,所以用的之前的安装包。官网下载是很慢的,差不多1个小时?推荐

    2022年10月15日
  • Android telephony_android获取真实时间

    Android telephony_android获取真实时间做一波获取手机卡LET的信息操作。看了一波源码写出来的一些东西首先需要的一些权限(危险权限动态获取一下,之前的里面有):<uses-permissionandroid:name=”android.permission.INTERNET”/><uses-permissionandroid:name=”android.permission.ACCESS_WIFI_ST…

  • hashmap扩容死锁简书_sql死锁

    hashmap扩容死锁简书_sql死锁HashMap扩容HashMap扩容transfer()函数原Entry数组转移到新Entry数组扩容死锁单线程扩容多线程扩容死锁HashMap扩容HashMap在JDK1.7使用的是数组+链表的方式,而在JDK1.8及以后则使用的是数组+链表+红黑树的方式进行数据存储。本文主要是对JDK1.7中存在的死锁问题进行分析。transfer()函数/***TransfersallentriesfromcurrenttabletonewTable.*/v

发表回复

您的电子邮箱地址不会被公开。

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