【发布时间】:2011-04-05 00:09:54
【问题描述】:
我有一个名为AP.AP_BATCHES_ALL的表:
SELECT
OWNER,
OBJECT_NAME,
OBJECT_TYPE
FROM
ALL_OBJECTS
WHERE
OWNER = 'AP' AND OBJECT_NAME = 'AP_BATCHES_ALL'
+-------+----------------+-------------+
|所有者 |对象名 |对象类型 |
+-------+----------------+-------------+
|美联社 | AP_BATCHES_ALL |表 |
+-------+----------------+-------------+
我可以查询这张表:
SELECT * FROM AP.AP_BATCHES_ALL
返回 200,000+ 条记录。
现在,有一个名为 APPS.AP_BATCHES 的同义词引用了前面提到的 AP.AP_BATCHES_ALL 表:
SELECT * FROM ALL_SYNONYMS WHERE OWNER = 'APPS' AND SYNONYM_NAME = 'AP_BATCHES'
+-------+-------------+-------------+------------ ----+----------+
|所有者 | SYNONYM_NAME |表所有者 |表名 | DB_LINK |
+-------+-------------+-------------+------------ ----+----------+
|应用程序 | AP_BATCHES |美联社 | AP_BATCHES_ALL | |
+-------+-------------+-------------+------------ ----+----------+
现在,当我查询 APPS.AP_BATCHES(同义词)时,我得到 no 记录:
SELECT * FROM APPS.AP_BATCHES
没有记录返回,即使 APPS.AP_BATCHES 只是 AP.AP_BATCHES_ALL 的同义词(包含 200,000 多条记录的表)。
为什么查询同义词不返回记录,而查询引用的表?
【问题讨论】:
-
APPS.AP_BATCHES 上是否有任何策略(DBMS_RLS,另见 v$vpd_policies)?
-
@Vincent:你读懂了我的想法。把它变成一个答案,我会给你信用。