数据库之间的sys_context不一致

问题描述 投票:0回答:1

我有一个使用 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 返回不同的结果?

plsql
1个回答
0
投票

这是因为您的实例 1 的表

AE9_COMPANY_TRN.<table name>
没有约束,而您的实例 2 的表
AE9_COMPANY_TRN.<table name>
有多个约束。

换句话说:您在实例 1 和实例 2 上的

AE9_COMPANY_TRN
模式中部署了不同版本的数据模型。

© www.soinside.com 2019 - 2024. All rights reserved.