我有 2 个数组,我将使用它们与 FORALL 一起插入/更新。我不确定我是否可以在 FORALL 中使用“MERGE”语句,所以我使用了两个数组。
在数组中填充数据时,我检查它是否已经在数据库中。如果是,我将填充的数据放在一个数组中,该数组意味着要更新,否则它会插入数组。
TYPE T_TABLE IS TABLE OF TABLE_1%ROWTYPE INDEX BY PLS_INTEGER;
TAB_I T_TABLE;
TAB_U T_TABLE;
--..more code
BEGIN
SELECT COUNT(*) INTO rec_exist FROM TABLE_1 where COL_1 = ID;
EXCEPTION
WHEN NO DATA FOUND THEN
rec_exist := 0;
END;
--.... more code
-- COL1 is PK
IF rec_exist = 0 THEN
TAB_I(IDX_I).COL1 = col1;
TAB_I(IDX_I).COL2 = col2;
IDX_I = IDX_I+ 1;
ELSE
TAB_U(IDX_U).COL1 = col1;
TAB_U(IDX_U).COL2 = col2;
IDX_U = IDX_U+ 1;
END IF:
每 1000 条记录后,我将这些表发送到插入/更新。
现在的问题是,假设我收到了一条 table_1 中不存在的记录。我决定把它放在 tab_i 数组中。我收到了这条记录的另一条记录更新。由于它不在表中,我将决定放入 tab_i,当我将它插入 forall 循环时,它会给我一个问题。
现在,如果我的 forall 循环就像
FORALL .. 插入
FORALL .. 更新
犯罪;
如果,我将记录更新为“更新”语句的一部分,该语句尚未在表中,但作为上面 forall 的一部分插入到表中,该更新是否有效?