如何在 SQL 中保存数据并在其上循环?
Posted
技术标签:
【中文标题】如何在 SQL 中保存数据并在其上循环?【英文标题】:How to save data in SQL and loop on it? 【发布时间】:2020-01-08 10:31:34 【问题描述】:一旦我运行第一个查询,我得到以下结果:
REQUEST_NO R
---------- -
4309300 A
4300983 C
如果 R 列与“C”不同,我想比较运行第二个查询并对我在 REQUEST_NO 列中与 C 不同的每个元素执行相同操作
SELECT REQUEST_NO
, REQUEST_STS
FROM PORT_REQUEST
WHERE REQUEST_NO IN (SELECT DISTINCT REQUEST_NO
FROM SUB_PORT_REQUEST
WHERE SUBSCRIBER_NO = replace(replace('&CTN','-',''),' ',''));
Enter value for ctn: 5161890110
REQUEST_NO R
---------- -
4309300 A
4300983 C
SELECT ACT_SEQ_NO
FROM SUB_PORT_REQUEST
WHERE REQUEST_NO=&Req_No
AND ROWNUM <=1
ORDER BY ACT_SEQ_NO DESC;
Enter value for req_no: 4309300
ACT_SEQ_NO
----------
91180671
我希望将所有值保存在数组或其他东西中,并且可以对其进行迭代,有人可以帮忙吗?
【问题讨论】:
【参考方案1】:如果您想保留在 SQL*Plus 中,一个选项是创建一个(全局临时?)表,将第一个查询的结果存储到其中,然后重写第二个查询以将这些结果用作
where request_no in (select request_no from my_temporary_table)
另一个是切换到 PL/SQL 并编写一个接受 CTN 作为参数的过程。它 (PL/SQL) 允许您使用不同的方式将第一个查询的结果存储到表(如前所述)或数组中。
【讨论】:
【参考方案2】:您可以通过加入表将这些组合为仅 1 个查询。我不确定我是否知道如何处理“and rownum
select act_seq_no
from ( select spr.act_seq_no
from sub_port_request spr
join port_request pr
on (spr.request_no = pr.request_no and
pr.request_sts != 'C'
)
where spr.subscriber_no = replace(replace('&CTN','-',''),' ','')
order by spr.act_seq_no desc
)
where rownum<=1;
【讨论】:
以上是关于如何在 SQL 中保存数据并在其上循环?的主要内容,如果未能解决你的问题,请参考以下文章
如何在scala中获取分层数组的最终元素并在其上应用聚合函数?
如何在 MapView 上绘制多边形,填充它,并在其上放置一个 onTouch 事件