不允许时用于替换MERGE INTO Oracle语法的模式
||
我有一个使用Oracle MERGE INTO ... DML语句更新表A以与另一个表B中的某些更改相对应的应用程序(表A是表B所选部分的摘要以及一些其他信息)。在典型的合并操作中,可能在表B中插入5-6行(十万分之一),并更新2-3行。
事实证明,该应用程序将部署在目标表上具有安全策略的环境中。 MERGE INTO ...语句不能与这些表一起使用(ORA-28132:语法合并不支持安全策略)
因此,我们必须更改MERGE INTO ...逻辑,以改为使用常规插入和更新。这是其他人遇到的问题吗?是否存在用于将merge语句中的WHEN MATCHED / WHEN NOT MATCHED逻辑转换为INSERT和UPDATE语句的最佳实践模式?合并在存储过程中,因此,如果需要,除了DML之外,解决方案还可以使用PL / SQL。
没有找到相关结果
已邀请:
2 个回复
好按紊叉
可能有更好的方法来执行此操作,但这似乎很简单且面向SQL。如果数据集很大,那么PL / SQL解决方案将不会表现出色。
到街客核
另一种选择是将要合并的记录批量收集,然后尝试批量插入它们,捕获所有主键异常(我现在无法回忆起其语法,但是可以批量插入将所有无法插入的行放入另一个数组中,然后进行处理)。 逻辑上,无论如何,合并语句必须检查幕后每个记录的存在,我认为它的处理与我上面发布的代码非常相似。但是,合并将始终比在PLSQL中编码更为有效,因为合并将只有1个SQL调用,而不是许多SQL调用。