set serveroutput on DECLARE
TYPE type_id IS
TABLE OF policies_tab.id%TYPE;
TYPE type_create_dat IS
TABLE OF policies_tab.create_dat%TYPE;
t_id type_id;
t_create_dat type_create_dat;
BEGIN
select id,create_dat BULK COLLECT INTO t_id,t_create_dat from policies_tab where substr(id,-1) in(6);
FORall i in t_id.first .. t_id.last
update policy_aggr set create_dat =t_create_dat(i).create_dat
where pol_id =t_id(i).id;
--dbms_output.put_line(t_id(i));
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error while updating record in policy_aggr table' || sqlerrm);
ROLLBACK;
end;
编译时出现错误 t_id 和 t_id(i).id 必须声明,即使我在顶部声明 有人可以解释一下我在这里缺少什么以及错误的原因是什么
-- S a m p l e D a t a :
Create Table policies_tab AS
Select Cast( 6 as Number(6) ) as ID, To_Date('01.11.2024', 'dd.mm.yyyy') as CREATE_DAT From Dual Union All
Select 16, To_Date('05.11.2024', 'dd.mm.yyyy') From Dual Union All
Select 21, To_Date('18.11.2024', 'dd.mm.yyyy') From Dual ;
Create Table policy_aggr AS
Select Cast( 6 as Number(6) ) as POL_ID, To_Date('01.10.2024', 'dd.mm.yyyy') as CREATE_DAT From Dual Union All
Select 16, Null From Dual Union All
Select 21, Null From Dual ;
Select * From policies_tab;
身份证 | 创建_DAT |
---|---|
6 | 24 年 11 月 1 日 |
16 | 24 年 11 月 5 日 |
21 | 24 年 11 月 18 日 |
Select * From policy_aggr;
POL_ID | 创建_DAT |
---|---|
6 | 24 年 10 月 1 日 |
16 | 空 |
21 | 空 |
像这里一样尝试 - 你的代码稍微调整了......
Declare
TYPE type_id IS TABLE OF policies_tab.id%TYPE
INDEX BY PLS_INTEGER;
t_id type_id;
--
TYPE type_create_dat IS TABLE OF policies_tab.create_dat%TYPE
INDEX BY PLS_INTEGER;
t_create_dat type_create_dat;
Begin
Select id, create_dat BULK COLLECT INTO t_id, t_create_dat
From policies_tab
Where Substr(id, -1) IN( '6' );
--
FOR i in 1.. t_id.count LOOP
Update policy_aggr SET CREATE_DAT = t_create_dat(i)
Where pol_id = t_id(i);
END LOOP;
--
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error while updating record in policy_aggr table' || sqlerrm);
ROLLBACK;
End;
/
Select * From policy_aggr;
POL_ID | 创建_DAT |
---|---|
6 | 24 年 11 月 1 日 |
16 | 24 年 11 月 5 日 |
21 | 空 |