oracle - 循环游标 - PL/SQL
问题描述
我正在分析一年多的大量数据。方法是在光标的帮助下一次选择一天的数据,并继续用全年数据提供另一个表:-
declare
i_start_date date := date '2019-04-01';
i_end_date date := date '2019-04-02';
begin
for cur_r in (select a.id, b.status
from table1 a join table2 b on a.msg_id = b.msg_id
where b.t_date between i_start_date and i_end_date
)
loop
insert into test_table (id, status)
values (cur_r.id, cur_r.status);
end loop;
end;
/
你能帮我在 PL/SQL 块中运行这个游标,并进行错误处理吗?
如下所示:-
declare
i_start_date date := date '2019-01-01'; --start date set
i_end_date date := date '2019-12-31'; --end date set
begin
for i_start_date<=i_end_date --condition to fetch data & insert
(for cur_r in (select a.id, b.status
from table1 a join table2 b on a.msg_id = b.msg_id
where b.t_date = i_start_date
)
loop
insert into test_table (id, status)
values (cur_r.id, cur_r.status);
end loop;)
i_start_date+1 -- increment start date
end;
/
谢谢,
解决方案
为什么你甚至需要pl/sql?
insert into test_table (id,
status
)
values (select a.id,
b.status
from table1 a
join table2 b on a.msg_id = b.msg_id
where b.t_date between date '2019-04-01
and date '2019-04-02'
and b.t_date not in (select t_date
from status)
;
但是请注意,在您比较 DATE(我只是简单地复制了)时,oracle DATE 始终包含一个时间组件,并且上述比较会将您提供的日期截断为午夜。因此,将不会选择 b.t_date = to_date('2019-04-02 09:10:11','yyyy-mm-dd') 的行。
推荐阅读
- mysql - 在 Couchbase 中更新高度嵌套的文档
- c# - 在其他代码运行时从函数返回响应 .netcore
- java - 有没有办法用 JNI 设置 DirectByteBuffer 内存?
- python - 如何仅将 img 文件移动到具有原始文件夹名称+ImageOnly 的另一个文件夹?
- laravel - 如何在 Spatie/permission (Laravel) 中获取具有特定权限的角色列表
- javascript - css flex 列自动高度
- php - 本地主机 Wordpress 永久链接不起作用
- excel - Excel VBA在相邻单元格中查找具有最大值的字符串
- angular - 如何知道是否设置了 Observable 更改值或最终值
- javascript - Eslint 自定义导入订单