我有一个使用 sys_context 的简单代码,它为我提供了具有相同数据的 2 个差异数据库之间的差异结果:
这里是示例代码:
alter session set current_schema = <schemaX>;
DECLARE
v_schema_name varchar2(128);
v_constraint_name varchar2(128);
BEGIN
dbms_output.put_line('---------------------------------------------------------');
dbms_output.put_line('------------ Restricting using sys_context --------------');
dbms_output.put_line('---------------------------------------------------------');
BEGIN
dbms_output.put_line(sys_context('USERENV','CURRENT_SCHEMA'));
SELECT constraint_name
INTO v_constraint_name
FROM all_constraints
WHERE table_name = <table name>
AND owner = sys_context('USERENV','CURRENT_SCHEMA')
;
dbms_output.put_line(v_constraint_name);
EXCEPTION
when others then
dbms_output.put_line('Error raised : '||sqlerrm);
END;
END;
我跑了两个不同的实例:
Results in Instance 1:
---------------------------------------------------------
------------ Restricting using sys_context --------------
---------------------------------------------------------
AE9_COMPANY_TRN
Error raised : ORA-01403: no data found
Results in Instance 2: (THIS IS WHAT IS EXPECTED)
---------------------------------------------------------
------------ Restricting using sys_context --------------
---------------------------------------------------------
AE9_COMPANY_TRN
Error raised : ORA-01422: exact fetch returns more than requested number of rows
为什么实例 1 返回不同的结果?
这是因为您的实例 1 的表
AE9_COMPANY_TRN.<table name>
没有约束,而您的实例 2 的表 AE9_COMPANY_TRN.<table name>
有多个约束。
换句话说:您在实例 1 和实例 2 上的
AE9_COMPANY_TRN
模式中部署了不同版本的数据模型。