Oracle 在触发器内使用字典表时输出不正确

Oracle 在触发器内使用字典表时输出不正确,oracle,oracle11g,triggers,Oracle,Oracle11g,Triggers,我正在使用ALL_TABLES/ALL_TAB_COLUMNS获取我的模式(EDW\u SRC)和另一个模式(EDW\u STG)中的表数。在sql developer中运行查询时,我得到了正确的计数,如下所示。但是,如果我将相同的查询放在触发器中,我会得到其他模式的错误计数(EDW\u STG) 请参阅以下代码: (这只是一个复制问题的示例代码,而不是我的业务需求。我在实际代码中引用ALL_TAB_COLUMNS,以获取不同架构中特定表中的列数,我有权选择访问这些列。) 不同的架构计数应为10

我正在使用
ALL_TABLES/ALL_TAB_COLUMNS
获取我的模式(
EDW\u SRC
)和另一个模式(
EDW\u STG
)中的表数。在sql developer中运行查询时,我得到了正确的计数,如下所示。但是,如果我将相同的查询放在触发器中,我会得到其他模式的错误计数(
EDW\u STG

请参阅以下代码: (这只是一个复制问题的示例代码,而不是我的业务需求。我在实际代码中引用
ALL_TAB_COLUMNS
,以获取不同架构中特定表中的列数,我有权选择访问这些列。)

不同的架构计数应为101。为什么是2

Oracle版本: Oracle数据库11g企业版11.2.0.4.0版-64位生产

谢谢
K

您确定在同一数据库的连接中运行
触发器和查询吗?您对
EDW\u STG
模式中的对象的访问权限是通过角色授予的吗?@KaushikNayak是的,我在同一数据库连接中运行它。@AlexPoole是的,访问权限是通过角色授予的。@Kapil-然后,这解释了发生的事情。在触发器中,您看不到来自角色的访问的表。在执行
set role none
之后,尝试运行独立计数,您将看到相同的结果。
select user from dual;

USER
-----
EDW_SRC

DROP TABLE ABC;
Table ABC dropped.

CREATE TABLE ABC(ID NUMBER);
Table ABC created.

select count(1) EDW_STG_CNT 
from all_tables
where owner='EDW_STG';--Different Schema

EDW_STG_CNT
----------
101

select count(1) EDW_SRC_CNT 
from all_tables
where owner='EDW_SRC';--My Schema

 EDW_SRC_CNT
------------
1554

create or replace trigger trig_test_dml_abc
before insert on abc
DECLARE
V_STG_CNT number :=NULL;
V_SRC_CNT number :=NULL;
begin
DBMS_OUTPUT.PUT_LINE('***** TRIGGER OUTPUT *****');
select count(1) into V_SRC_CNT from all_tables
where owner='EDW_SRC'; --My Schema
DBMS_OUTPUT.PUT_LINE('My Schema EDW_SRC_CNT :'||V_SRC_CNT);

select count(1) into V_STG_CNT from all_tables
where owner='EDW_STG'; --Different Schema
DBMS_OUTPUT.PUT_LINE('Different Schema EDW_STG_CNT :'||V_STG_CNT);
end;

Trigger TRIG_TEST_DML_ABC compiled

INSERT INTO ABC VALUES (2);
1 row inserted.

***** TRIGGER OUTPUT *****
My Schema EDW_SRC_CNT :1554
Different Schema EDW_STG_CNT :2