从 PL/SQL 包中的动态字符串(立即执行)创建数据库视图 - 问题?



我想在运行时创建一个动态视图,该视图由列字符串和一个在一个数据库上使用 EXECUTE IMMEDIATE 的 where 子句组成,该子句将使用db_link在第二个数据库上进行查询。

我的问题如下。

  1. 将使用database_link在另一个数据库上查询视图 我是否需要同时(如果有的话(向视图(即 PUBLIC(和同义词(作为 PUBLIC(授予权限? 还是只需要创建一次?

  2. 如果在 PL/SQL 包中,通过不存在的数据库链接引用了另一个数据库上的对象,则包是否无效?还是无论如何它都会编译?

  3. 我假设我需要在执行即时字符串中"创建或替换视图",因为第二次运行此过程时,视图已经存在于数据库中?

提前感谢大家对此的任何反馈。

首先,我建议你不要这样做。在 Oracle 中,对象创建一次,并随时使用。您期望动态创建视图有什么好处?(我不是说你不能这样做,只是建议考虑一下(。

现在,回答您的问题:

  1. 您不需要GRANT因为 - 为了创建数据库链接,您已经知道远程数据库的用户名和密码
  2. 如果另一个数据库中的对象无效,则执行或编译过程将失败
  3. 是的,因为如果没有or replaceOracle 会抱怨具有该名称的对象已经存在。

最新更新