我有以下问题: 在我的应用程序中(供参考:c ++和occi虽然与问题无关)我有同时访问多个oracle数据库模式的查询。其中一个查询具有(简化)结构:
SELECT MAX(COL_A) FROM TABLE_A UNION ALL SELECT MAX(COL_B) SCHEMA_B.TABLE_B;
TABLE_A
来自SCHEMA_A
。我现在在测试数据库上创建了这个SCHEMA_A
的副本,并希望用它来测试应用程序。
问题是SCHEMA_B
不受我的控制,并且在此测试数据库中不可见。
有没有办法在TABLE_B
内创建一个SCHEMA_A
,以便可以像上面那样查询它,就好像有一个SCHEMA_B
实际上没有退出那个DB?
避免这种情况的一种可能方法可能是在SCHEMA_A
的生产版本中创建一个同义词
CREATE SYNONYM TABLE_B for SCHEMA_B.TABLE_B;
然后将应用程序中的查询更改为
SELECT MAX(COL_A) FROM TABLE_A UNION ALL SELECT MAX(COL_B) TABLE_B;
然后在测试数据库中的TABLE_B
内创建一个SCHEMA_A
。问题是在生产数据库中更改内容并不是完全简单的,因此如果有一种方法可以“伪造”测试数据库上SCHEMA_B
的存在,那将是更好的选择。
在测试数据库中创建另一个数据库模式(实际上称为SCHEMA_B
,然后我可以从中授予对SCHEMA_A
的选择权限)并未完全排除,但如果我可以保留SCHEMA_A
中包含的内容1}}这会更好。