存储过程如何将update中多条语句其中两字段返回到指定游标中,求职大佬们

jackleeonlyone 2018-07-04 06:05:23

create or replace procedure BY_STOCK_IN_ADJUST_ACTION(
requestids in integer,
ids out integer,
modedatacreater out varchar2,
thecursor IN OUT cursor_define.weavercursor)
as
inum integer;
tanum integer;
gpCode varchar2(255); -- 股票代码
poolLevel integer;--股票级别
target varchar2(255);--目标产品
begin

-- 根据requestid 查找对应流程所需数据,股票调整流程
select a.tiaokcpmc ,a.gupjb,substr(b.jiargpdm,0,length(b.jiargpdm)-2) into target,poolLevel,gpCode from formtable_main_144 a,formtable_main_144_dt1 b where a.id=b.mainid and a.requestid=requestids;


select count(1) into inum from uf_stock_pool where stockcode = gpCode and fundcode=target and pool_id=poolLevel;
if inum =0 then
return;
end if;
--判断是否pool_id
if tanum > 0 then --pool_id 全部为1

--其中的问题就是,update语句有多条,怎么将多条数据中 id,modedatacreater 放到thecursor游标中
update(select * from uf_stock_pool a where stockcode=gpCode and fundcode=target ) set fundcode=target ,pool_id=0;

else --pool_id 全部为0;
update(select * from uf_stock_pool a where stockcode=gpCode and fundcode=target) set fundcode= target,pool_id=1;

end if;
<<success_msg>>
open thecursor for
select ids,modedatacreater from dual;

when others then
rollback;

end;

...全文
566 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackleeonlyone 2018-07-05
  • 打赏
  • 举报
回复
jackleeonlyone 2018-07-05
  • 打赏
  • 举报
回复
什么意思啊·
jackleeonlyone 2018-07-05
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
RETURNING 字段 BULK COLLECT INTO enums,放在update语句的后面
  • 打赏
  • 举报
回复
引用 6 楼 jackleeonlyone 的回复:
[quote=引用 5 楼 baidu_36457652 的回复:]
[quote=引用 4 楼 jackleeonlyone的回复:]

你的ids和creater 是变量吗?
你前面要定义一个PLSQL表,两列的。然后into进去,游标的情况,我没试过,你可以试试[/quote]

create or replace procedure BY_STOCK_IN_ADJUST_ACTION( requestids in varchar2,
ids out integer,
creater out varchar2,
thecursor IN OUT cursor_define.weavercursor)
as
inum integer;
tanum integer;
gpCode varchar2(255); -- 股票代码
poolLevel integer;--股票级别
target varchar2(255);--目标产品
TYPE CIDS IS TABLE OF integer;
ci CIDS;
TYPE MCR IS TABLE OF integer;
cr MCR;
begin

-- 根据requestid 查找对应流程所需数据,股票调整流程
select a.tiaokcpmc ,a.gupjb,substr(b.jiargpdm,0,length(b.jiargpdm)-2) into target,poolLevel,gpCode from formtable_main_144 a,formtable_main_144_dt1 b where a.id=b.mainid and a.requestid=requestids;

select count(1) into inum from uf_stock_pool where stockcode = gpCode and fundcode=target and pool_id=poolLevel;
if inum =0 then
return;
end if;

--判断是否pool_id
select (case when instr(a,'1') >0 then 1 else 0 end) into tanum from (select wm_concat(pool_id) a from uf_stock_pool where stockcode=gpCode and fundcode=target );
if tanum > 0 then --pool_id 全部为1
update(select * from uf_stock_pool a where stockcode=gpCode and fundcode=target ) set fundcode=target ,pool_id=0;

else --pool_id 全部为0;
update(select * from uf_stock_pool a where stockcode=gpCode and fundcode=target) set fundcode= target,pool_id=1
RETURNING id,modedatacreater BULK COLLECT INTO ci,cr;
end if;
commit;

open thecursor for
select ids,creater from dual;
Exception
when others then
rollback;

end;


怎么将ci,cr放到thecursor游标中[/quote]
这个好像不能再放到 游标里面了。里面的内容只能遍历的方式 查询。
jackleeonlyone 2018-07-05
  • 打赏
  • 举报
回复
引用 5 楼 baidu_36457652 的回复:
[quote=引用 4 楼 jackleeonlyone的回复:]

你的ids和creater 是变量吗?
你前面要定义一个PLSQL表,两列的。然后into进去,游标的情况,我没试过,你可以试试[/quote]

create or replace procedure BY_STOCK_IN_ADJUST_ACTION( requestids in varchar2,
ids out integer,
creater out varchar2,
thecursor IN OUT cursor_define.weavercursor)
as
inum integer;
tanum integer;
gpCode varchar2(255); -- 股票代码
poolLevel integer;--股票级别
target varchar2(255);--目标产品
TYPE CIDS IS TABLE OF integer;
ci CIDS;
TYPE MCR IS TABLE OF integer;
cr MCR;
begin

-- 根据requestid 查找对应流程所需数据,股票调整流程
select a.tiaokcpmc ,a.gupjb,substr(b.jiargpdm,0,length(b.jiargpdm)-2) into target,poolLevel,gpCode from formtable_main_144 a,formtable_main_144_dt1 b where a.id=b.mainid and a.requestid=requestids;

select count(1) into inum from uf_stock_pool where stockcode = gpCode and fundcode=target and pool_id=poolLevel;
if inum =0 then
return;
end if;

--判断是否pool_id
select (case when instr(a,'1') >0 then 1 else 0 end) into tanum from (select wm_concat(pool_id) a from uf_stock_pool where stockcode=gpCode and fundcode=target );
if tanum > 0 then --pool_id 全部为1
update(select * from uf_stock_pool a where stockcode=gpCode and fundcode=target ) set fundcode=target ,pool_id=0;

else --pool_id 全部为0;
update(select * from uf_stock_pool a where stockcode=gpCode and fundcode=target) set fundcode= target,pool_id=1
RETURNING id,modedatacreater BULK COLLECT INTO ci,cr;
end if;
commit;

open thecursor for
select ids,creater from dual;
Exception
when others then
rollback;

end;


怎么将ci,cr放到thecursor游标中
  • 打赏
  • 举报
回复
引用 4 楼 jackleeonlyone的回复:
你的ids和creater 是变量吗? 你前面要定义一个PLSQL表,两列的。然后into进去,游标的情况,我没试过,你可以试试
jackleeonlyone 2018-07-04
  • 打赏
  • 举报
回复
这个存储没有完整,希望大佬补充一下;
【更新至2025年】2001-2025年上市公司数字化转型年报词频统计(吴非、赵宸宇、甄红线)(300+年报词频统计) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行统计 (2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行统计 (3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行统计 5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然语言处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧