【发布时间】:2017-04-12 13:26:50
【问题描述】:
甲骨文 11g。这似乎应该是显而易见的,但我还没有看到一个例子。我有 2 个例外,每个例外都需要编写稍微不同的日志消息,然后它们应该执行相同的 UPDATE 和 CONTINUE。
有什么方法可以构造异常,所以我只需要键入一次 UPDATE 和 CONTINUE 语句,同时保持不同的日志记录?
FOR my_rec IN my_cursor
LOOP
BEGIN
...do some stuff
EXCEPTION
WHEN NO_DATA_FOUND THEN
log_detail.new('Skipping record - ID not found');
UPDATE my_table
SET operation_result = 'Failed'
WHERE my_id = my_rec.some_id;
CONTINUE;
WHEN OTHERS THEN
log_detail.new('Skipping record - unknown error');
UPDATE my_table
SET operation_result = 'Failed'
WHERE my_id = my_rec.some_id;
CONTINUE;
END;
END LOOP;
【问题讨论】:
-
您能否定义一个单独的过程(可能是本地过程)来执行
update(以及您想要的任何其他内容),然后从两个异常处理程序中调用该过程? -
@JustinCave 我想到了这一点,但我仍然需要继续。我只是觉得我错过了一个技巧,但如果这是唯一的方法......
-
我不确定您是否需要
continue,除非您想跳过循环内的其他逻辑。我只需要一个名为log_detail.new的过程,并执行update将日志消息和my_rec.some_id作为参数。 -
@JustinCave 看起来你是对的,不需要继续。这有助于简化。感谢您的帮助!
标签: oracle exception plsql oracle11g exception-handling