我对甲骨文很陌生,所以不完全确定这是可能的,或者如果我的方法不对,但这里有......
我正在修复的旧馈送脚本的一部分是循环通过约 20 个表(可以随时更改)以填充相关的临时表。这部分目前非常基础:
...
INSERT INTO staging_tbl_1(
SELECT *
FROM source_tbl_1
);
INSERT INTO staging_tbl_2(
SELECT *
FROM source_tbl_2
);
...
源数据库中的某些字段具有不同的约束等,这意味着它会时不时地抛出异常并且馈线将停止。我希望做的是在现有的 feeder 包中创建一个过程,以便在插入之前遍历每条记录中的每一行,并将其简单地包装在一个异常块中。这样就可以在不导致馈线停止的情况下对其进行记录。
本质上我正在追逐这样的东西:
BEGIN procedure_x(source_record, staging_record)
-- Perform validation to ensure records exit
-- Loop through all record rows
FOR row IN (SELECT * FROM source_record) LOOP
-- Wrap in exception block
-- Insert into staging record
-- Log exception if it occurs
END LOOP;
END
我尝试过引用游标,但是为了让它们工作,我还需要提前知道行类型(根据我有限的理解)。我也尝试过立即执行,但是我找不到以适当方式循环它的方法。还有其他方法可以解决这个问题吗?
额外的:
我意识到我们真的应该解决问题的根源而不是像这样解决它,不幸的是它远远超出了我的影响范围。
可以在不进行单独过程的情况下执行此操作,只需将所有表引用包装在一个循环中,但是我想将此作为最后的手段。