我在oracle(具有5列)中有一个表类型的input + output(IO)变量,我从一个循环中读取它的值,并且还执行验证,如果触发了验证,则在第五列中输入错误消息。如果第五列为空,则在表中插入值。我有为此工作的代码。但是我需要的是,假设我要插入5行,并且如果对任何行触发了验证,那么也不应为其他行插入数据。我无法引发异常,因为我仍需要其他行的错误消息。
我对此有2个解决方案。首先..首先执行验证(不插入),如果第五列为空,则将再次运行循环并插入表中。 第二..在临时表中插入值,如果直到最后一行都没有验证通过,则将从临时表中选择并插入主表中。
是否有更好的方法来处理?
答案 0 :(得分:0)
您可以尝试在插入之前验证所有行,然后使用命令“ INSERT SELECT”将所有行插入到表中,第五列是否填充有错误消息(基于您先前的验证)。 / p>
示例:
BEGIN
--DO SOME VALIDATION
INSERT INTO <TABLE_NAME>
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4, 'ERROR OR NOT ERROR' COLUMN5
FROM <OTHER_TABLE>;
END;
这样,您不需要第二个循环,但是您需要查看它是否适合您的需求。