为什么Oracle同义词会向基础表返回不同数量的行?

为什么Oracle同义词会向基础表返回不同数量的行?,第1张

概述我有一个非常不寻常的情况,我希望有人能够阐明.我对oracle同义词的理解是它基本上是另一个模式中表的别名. 当我从同义词进行计数时,它返回零行.当我从基础表执行相同 *** 作时,它返回12,000行. 我无法解释这种差异.有人可以帮忙吗? select * from dba_synonymswhere synonym_name = 'CS_INCIDENTS_B_SEC';OWNER SYNO 我有一个非常不寻常的情况,我希望有人能够阐明.我对oracle同义词的理解是它基本上是另一个模式中表的别名.

当我从同义词进行计数时,它返回零行.当我从基础表执行相同 *** 作时,它返回12,000行.

我无法解释这种差异.有人可以帮忙吗?

select * from dba_synonymswhere synonym_name = 'CS_INCIDENTS_B_SEC';OWNER  SYNONYM_name        table_OWNER  table_name          DB_link------ ------------------- ------------ ------------------- -------APPS   CS_INCIDENTS_B_SEC  CS           CS_INCIDENTS_ALL_B         select count(*) from CS.CS_INCIDENTS_ALL_B;COUNT(*)               ---------------------- 12549                  select count(*) from APPS.CS_INCIDENTS_B_SEC;COUNT(*)               ---------------------- 0

解释计划:

直接在桌子上……

EXPLAIN PLAN FORSELECT  *FROM    CS.CS_INCIDENTS_ALL_BPLAN_table_OUTPUT--------------------------------------------------------------------------| ID  | Operation         | name               | Rows | Bytes| Cost(%cpu)|--------------------------------------------------------------------------|   0 | SELECT STATEMENT  |                    | 6056 | 1549K|  122   (3)||   1 |  table ACCESS FulL| CS_INCIDENTS_ALL_B | 6056 | 1549K|  122   (3)|--------------------------------------------------------------------------

通过同义词……

EXPLAIN PLAN FORSELECT  *FROM    APPS.CS_INCIDENTS_B_SECPLAN_table_OUTPUT---------------------------------------------------------------------------| ID  | Operation          | name               | Rows | Bytes| Cost(%cpu)|---------------------------------------------------------------------------|   0 | SELECT STATEMENT   |                    |    1 |  262 |    0   (0)||*  1 |  FILTER            |                    |      |      |           ||   2 |   table ACCESS FulL| CS_INCIDENTS_ALL_B | 6056 | 1549K|  122   (3)|---------------------------------------------------------------------------1 - filter(NulL IS NOT NulL)

同义词链……

sql> SELECT  *  2  FROM    dba_synonyms  3  START WITH  4          owner = 'CS'  5          AND synonym_name = 'CS_INCIDENTS_ALL_B'  6  CONNECT BY  7          owner = PRIOR table_owner  8          AND synonym_name = PRIOR table_name  9  /no rows selectedsql> SELECT  *  2  FROM    dba_synonyms  3  START WITH  4          owner = 'APPS'  5          AND synonym_name = 'CS_INCIDENTS_B_SEC'  6  CONNECT BY  7          owner = PRIOR table_owner  8          AND synonym_name = PRIOR table_name  9  /

检查数据库的策略…

sql> SELECT *  2  FROM dba_policIEs  3  WHERE OBJECT_name = 'CS_INCIDENTS_B_SEC'  4  /OBJECT_OWNER  OBJECT_name         POliCY_GROUP  POliCY_name          ------------- ------------------- ------------- -------------------- APPS          CS_INCIDENTS_B_SEC  SYS_DEFAulT   CS_SR_SEC_SR_ACCESS  PF_OWNER  PACKAGE            FUNCTION       SEL INS UPD DEL IDX CHK --------- ------------------ -------------- --- --- --- --- --- --- APPS      FND_GENERIC_POliCY GET_PREDICATE  YES NO  NO  NO  NO  NO  ENABLE STATIC_POliCY POliCY_TYPE  LONG_PREDICATE------ ------------- ------------ --------------YES    NO            DYNAMIC      YES
解决方法 更新:

您已启用ROW LEVEL SECURITY.

每次访问表时都会调用用户函数FND_GENERIC_POliCY.GET_PREDICATE,并限制对某些行的访问.

它会返回不同的结果,具体取决于您如何访问表:直接或通过SYNONYM.

您需要查看该函数并查看正在进行的 *** 作(或在此处发布函数文本).

总结

以上是内存溢出为你收集整理的为什么Oracle同义词会向基础表返回不同数量的行?全部内容,希望文章能够帮你解决为什么Oracle同义词会向基础表返回不同数量的行?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1165795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存