sql - 运行 DBMS_COMPARISON.CONVERGE 子程序时出现错误 ORA-00942
问题描述
当我运行使用 DBMS_COMPARISON 包在两个不同模式上同步两个表的存储过程时,我得到 ORA-00942 - 表或视图不存在 - 错误。
这大致是我所拥有的:
remote table local comparison local table
DB1.PRODUCTS DB2.PRODUCTS_CMP DB2.PRODUCTS
这是本地 DB2 过程:
create or replace PROCEDURE SYNC_SINGLE AS
L_SCAN_INFO SYS.DBMS_COMPARISON.COMPARISON_TYPE;
L_RESULT BOOLEAN;
L_COMPNAME VARCHAR2(30);
BEGIN
L_COMPNAME:='PRODUCT_CMP';
SYS.DBMS_COMPARISON.PURGE_COMPARISON(
COMPARISON_NAME => L_COMPNAME
);
L_RESULT :=
SYS.DBMS_COMPARISON.COMPARE (
COMPARISON_NAME => L_COMPNAME,
SCAN_INFO => L_SCAN_INFO,
PERFORM_ROW_DIF => TRUE
);
FOR ROW_ID IN (
SELECT SCAN_ID
FROM USER_COMPARISON_SCAN_SUMMARY
WHERE COMPARISON_NAME = L_COMPNAME
AND STATUS = 'BUCKET DIF'
)
LOOP
SYS.DBMS_COMPARISON.CONVERGE (
COMPARISON_NAME => L_COMPNAME,
SCAN_ID => ROW_ID.SCAN_ID,
SCAN_INFO => L_SCAN_INFO,
CONVERGE_OPTIONS => SYS.DBMS_COMPARISON.CMP_CONVERGE_REMOTE_WINS,
PERFORM_COMMIT => FALSE
);
END LOOP ROW_ID;
SYS.DBMS_COMPARISON.PURGE_COMPARISON(
COMPARISON_NAME => L_COMPNAME
);
END SYNC_SINGLE;
该过程以以下错误结束:
ORA-00942: table or view does not exist
ORA-06512: a "SYS.DBMS_COMPARISON", line 734
ORA-06512: a "SYS.DBMS_COMPARISON", line 5964
ORA-06512: a "SYS.DBMS_COMPARISON", line 682
ORA-06512: a "DB2.SYNC_SINGLE", line 26
ORA-06512: a "DB2.SYNC_SINGLE", line 26
ORA-06512: a line 2
我想这里有一个权限问题,但我不知道它是什么。用户 SYS 已获得对本地表 DB2.PRODUCTS 授予的所有权限。此外,我在以相同方式同步的相同模式上还有其他表,对于这些表,一切都很好。查看 SYS.COMPARISON$ 和 SYS.COMPARISON_COL$ 表,一切似乎都配置正确。
谁能帮忙建议我应该检查什么?
解决方案
我发现它是什么:过程声明中缺少AUTHID CURRENT_USER 。
create or replace PROCEDURE SYNC_SINGLE AUTHID CURRENT_USER AS
推荐阅读
- php - 如何显示该类别中的产品数量?在 laravel 中使用 Eloquent ORM
- reactjs - 如何在 Reactjs 中提交表单?(表格提交)
- omnet++ - 如何确定是否存在网络拥塞?或如何在 V2V 和 V2I 网络中造成拥塞?
- google-speech-to-text-api - Google Speech to Text API 填充词
- java - 将列表输出到文件
- automation - 仅当活动窗口为给定大小时,如何禁用热键?
- r - 在直方图ggplot2中添加列和每组的总值
- c# - PHP 可以包含“文件名”但 c#?
- uwp - UWP。如何打开多个视频
- java - 反转计数算法实现的问题