如何在 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中获取分层数组的最终元素并在其上应用聚合函数?

Bash:使用 CSV 文件构建循环并保存结果

如何在 MapView 上绘制多边形,填充它,并在其上放置一个 onTouch 事件

如何在 R 中使用带有 ggpie 函数的循环并在数据帧之后保存文件名?

如何在字符串中打印文字花括号字符并在其上使用 .format?