Plsql 如何在另一个查询中迭代来自一个Oracle查询的数据。
我不熟悉PL/SQL和Oracle SQL查询的世界 我想要达到的目标是什么?Plsql 如何在另一个查询中迭代来自一个Oracle查询的数据。,plsql,oracle11g,oracle-sqldeveloper,oracle12c,Plsql,Oracle11g,Oracle Sqldeveloper,Oracle12c,我不熟悉PL/SQL和Oracle SQL查询的世界 我想要达到的目标是什么? 获取从今天起最后100天(sysdate-100)装运的所有标有“600”标签的箱子。在这些盒子中,我需要将更新标签为“50”和“51”的盒子分开 逻辑: 1.让所有的箱子在最后100日装运,标签为“600”。另外,获取过去100天内装运的标签为“600”的数量。(例如,今天是09/06,获取05/29发货的所有箱子) 2.获取具有更新标签的所有框的计数。E. G,在从“600”->“50”移动的盒子中,有06个/
获取从今天起最后100天(sysdate-100)装运的所有标有“600”标签的箱子。在这些盒子中,我需要将更新标签为“50”和“51”的盒子分开 逻辑:
1.让所有的箱子在最后100日装运,标签为“600”。另外,获取过去100天内装运的标签为“600”的数量。(例如,今天是09/06,获取05/29发货的所有箱子) 2.获取具有更新标签的所有框的计数。E. G,在从“600”->“50”移动的盒子中,有06个/ 01个,我需要考虑这个盒子。 我正试图为这个用例编写一个PL/SQL,到目前为止我已经做到了这一点
VARIABLE box_id CHAR(50);
BEGIN
FOR box_id IN (SELECT
box_id, box_lable
FROM
my.box_table
WHERE box_lable = '600'
AND trunc(boxed_date) = trunc(SYSDATE - 100)
) LOOP
select count(*), box_lable
from my.shipping_info si
where box_id = si.box_id
and box_lable in ( '51', '50')
group by box_lable
--COde to print the count of box_label = 600; count of box_label = 51; count of box_label = 50 .
END LOOP;
END;
上面的代码在SQL Developer中引发了一个错误。我在Oracle11g和Oracle12c上运行这个。
只要解决方案适用于Oracle,我就可以灵活地使用任何方法(不一定是PL/SQL)
您能建议我运行此代码段所需的更改吗 将普通SQL与子查询一起使用,而不是PL/SQL循环:
select box_lable, count(*)
from my.shipping_info si
where box_id IN (
SELECT box_id
FROM my.box_table
WHERE box_lable = '600'
AND trunc(boxed_date) = trunc(SYSDATE - 100)
)
and box_lable in ( '51', '50')
group by box_lable
也考虑重写这一条件:
AND trunc(boxed_date) = trunc(SYSDATE - 100)
进入这个:AND boxed_date >= trunc(SYSDATE - 100)
AND boxed_date < trunc(SYSDATE - 99 )
和装箱日期>=trunc(SYSDATE-100)
装箱日期
这可能看起来很冗长,但有助于优化选择更好的执行计划,特别是允许在
装箱日期
上使用索引(函数trunc(装箱日期)
阻止optiomizer使用该索引)。因此:您有两个表,装箱日期
和发货信息
?box\u id
在一个表中是唯一的(可能是主键),在另一个表中是外键?什么是“更新的”标签-仅指可在装运信息
表中找到的任何标签(针对该箱子id
)?这是所有你应该在你的帖子中提供的信息-除了代码,就像你做的一样。谢谢!我想你简化了我的问题陈述。。我想这应该行得通