我在并行运行的merge语句中涉及了许多表。合并输出到通过DBMS_ERRLOG.CREATE_ERROR_LOG函数生成的错误表。该声明工作正常,合并有效。
然后我在错误表中添加了一个额外的列,它继续工作而没有问题。
我现在希望使附加列具有基于系统中其他位置的值的默认值(实质上是批处理日期,无论如何都与当前日期时间不同) - 我正在绊倒动辄限制。
我可以实现一个额外的更新后期处理来填充列,但是这必须为我合并的每个表完成,而且实际上有点像黑客 - 因为系统扩展了这个必须记住的每个错误表。填充默认值是首选方法。
如何根据有效的select语句解决Oracles PDML对触发器的限制,以填充此值。
答案 0 :(得分:2)
这看起来有点超出了DML错误表本来要做的范围,然后是 - 并行DML规则将限制你从其他选项。解决此问题的最简单方法是将批处理日期添加到原始表中,以便它也反映在错误表中。您需要花费一些存储成本,但如果您需要按批次识别行....
或者,正如您所提到的,有一个后处理解决方案。最后,是否有一种方法可以将该信息分层到一个视图中,当您查看错误时,该视图会覆盖错误表?或者批次日期以后无法计算?
答案 1 :(得分:2)
由于该值听起来相当静态,请查看SYS_CONTEXT。 例如,我有一个记录表,我存储当前运行的模块(使用DBMS_APPLICATION_INFO设置)。
column_name VARCHAR2(256)DEFAULT SYS_CONTEXT('USERENV','MODULE'),
不确定是否为会话或进程存储了传统的上下文值。如果它不能用于并行处理,请查看GLOBAL APPLICATION CONTEXT,您可以在给定用户名的所有会话中应用该{{3}}