Plsql ORA-30926错误,除非重新编译包

Plsql ORA-30926错误,除非重新编译包,plsql,oracle11g,Plsql,Oracle11g,每周从cron作业运行一次包中的过程,结果给出错误 “ORA-30926:无法在源表中获取一组稳定的行” 该错误似乎发生在执行立即“合并”语句的过程中 但是,在不更改任何相关数据的情况下,只需重新编译包并重新运行过程即可。下周,这个问题再次发生 merge语句的源代码来自一个临时表,该临时表首先使用INSERT/*+APPEND*/,然后使用COMMIT从外部表加载 包中还有其他几个过程,它们对没有问题的不同表(都使用相同的暂存表)执行相同的操作。每个过程都是按顺序运行的 有什么想法吗?请查看此

每周从cron作业运行一次包中的过程,结果给出错误

“ORA-30926:无法在源表中获取一组稳定的行”

该错误似乎发生在执行立即“合并”语句的过程中

但是,在不更改任何相关数据的情况下,只需重新编译包并重新运行过程即可。下周,这个问题再次发生

merge语句的源代码来自一个临时表,该临时表首先使用
INSERT/*+APPEND*/,
然后使用COMMIT从外部表加载

包中还有其他几个过程,它们对没有问题的不同表(都使用相同的暂存表)执行相同的操作。每个过程都是按顺序运行的


有什么想法吗?

请查看此问题的公认解决方案:QUOTE:“这通常是由USING子句中指定的查询中的重复项引起的。这可能意味着表A是父表,并且多次返回相同的ROWID。您可以通过在查询中使用DISTINCT快速解决此问题(事实上,如果‘Y’是一个常量,您甚至不需要将其放入查询中)。”您可以提问并添加完整的merge语句和相关表的定义(如
create table
语句)查询中没有重复项。正如我在描述中提到的,数据未被触及,与失败时的数据相同。唯一发生的事情是我重新编译包,然后它就工作了。可能是数据库中有另一个包或过程删除并创建包使用的表或视图。After DROP程序包将被反编译。创建后,程序包将保持反编译状态,直到您编译它,然后它才能工作。您必须查看程序包使用的表/视图列表,然后必须列出使用您提取的表/视图列表的所有过程/程序包。请参阅此问题的公认解决方案ase:QUOTE:“这通常是由USING子句中指定的查询中的重复项引起的。这可能意味着表A是父表,并且多次返回相同的ROWID。您可以通过在查询中使用DISTINCT来快速解决问题(事实上,如果'Y'是常量,您甚至不需要将其放入查询中)。”您的问题并添加完整的合并语句和相关表的定义(如
createtable
语句)查询中没有重复项。正如我在描述中提到的,数据未被触及,与失败时的数据相同。唯一发生的事情是我重新编译包,然后它就工作了。可能是数据库中有另一个包或过程删除并创建包使用的表或视图。After DROP程序包将被反编译。创建后,程序包将保持反编译状态,直到您编译它,然后它才能工作。您必须查看程序包使用的表/视图列表,然后必须列出使用已提取的表/视图列表的所有过程/程序包。