2011-11-20 99 views
3

在一个过程中,我将值插入到不同的表中,无论何时发生表的唯一/主键违例时,我都想专门处理该表的异常。我如何捕获不同的重复值异常?Oracle plsql捕获异常

回答

7

查看一些教程,如this

您的唯一/主键违规将是DUP_VAL_ON_INDEX例外。

+0

嗯,但我怎么知道从哪个表插入它被抛出? – Rnet

+0

然后你可能必须用这样一个异常块来包装你的每一条语句,或者你自己设置一个标记,以便你知道哪一个是最后一次成功的插入。 –

+0

嗯,这将是主键违规,但我可以处理外键错误不同? – Rnet

0

当你创建你的表时,你应该创建一个TRIGGER和一个SEQUENCE在你的表上运行Before Insert,并捕获如果:NEW.PRIMAY_KEY为null,然后从序列中获取它。

使用此方法,您将始终避免DUP_VAL_ON_INDEX。

我会避免使用WHEN OTHERS,因为这在实际的错误处理逻辑中没有真正的用处。