我想在运行时创建一个动态视图,该视图由列字符串和一个在一个数据库上使用 EXECUTE IMMEDIATE 的 where 子句组成,该子句将使用db_link在第二个数据库上进行查询。
我的问题如下。
-
将使用database_link在另一个数据库上查询视图 我是否需要同时(如果有的话(向视图(即 PUBLIC(和同义词(作为 PUBLIC(授予权限? 还是只需要创建一次?
-
如果在 PL/SQL 包中,通过不存在的数据库链接引用了另一个数据库上的对象,则包是否无效?还是无论如何它都会编译?
-
我假设我需要在执行即时字符串中"创建或替换视图",因为第二次运行此过程时,视图已经存在于数据库中?
提前感谢大家对此的任何反馈。
首先,我建议你不要这样做。在 Oracle 中,对象创建一次,并随时使用。您期望动态创建视图有什么好处?(我不是说你不能这样做,只是建议考虑一下(。
现在,回答您的问题:
- 您不需要
GRANT
因为 - 为了创建数据库链接,您已经知道远程数据库的用户名和密码 - 如果另一个数据库中的对象无效,则执行或编译过程将失败
- 是的,因为如果没有
or replace
Oracle 会抱怨具有该名称的对象已经存在。