有一个使用Hibernate的Java EE webapp,我无法访问的代码,所以我无法修改或看到它。我只能访问Oracle数据库。
我必须根据某些条件创建一个避免插入操作的触发器。这是我现在拥有的<test_adminhtml_index_index>
<reference name="content">
<block type="test/adminhtml_grid" name="info_list" />
</reference>
</test_adminhtml_index_index>
<test_adminhtml_index_edit>
<reference name="content">
<block type="test/adminhtml_info_edit" name="info_edit" />
</reference>
<reference name="left">
<block type="test/adminhtml_info_edit_tabs" name="info_tabs"></block>
</reference>
</test_adminhtml_index_edit>
触发器的相关代码:
BEFORE INSERT
这很好但问题是,这会抛出一个错误,无论如何都将传播到webapp服务器端代码...
if var_some_value = :new.another_value
then
RAISE_APPLICATION_ERROR(-12345, 'The insert will not be executed');
end if;
...
或其他类型的Exception。
这是不好的,因为其中一个要求是java webapp一定不会注意到插件没有完成,所以java代码不应该抛出任何异常。
还有其他方法可以更安静的方式停止插入行吗?
也许我应该采用另一种策略,例如SQLException
触发器,删除刚插入的行(如果需要)。为此,我需要使用自治事务,执行插入并提交它,然后删除它是否满足条件。但如果可能的话,我更愿意使用AFTER INSERT
方法。
关于如何做到这一点的任何想法?谢谢!
答案 0 :(得分:3)
实现此目的的唯一方法可能是创建视图并将应用程序插入到视图中。然后,视图上的替代触发器可以处理视图上的insert语句,并决定是否实际插入到表中。