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

Creating a database view from a dynamic string (EXECUTE IMMEDIATE) in a PL/SQL package - Questions?

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

我的问题如下。

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

  2. 如果在 PL/SQL 包中存在通过不存在的数据库 link 对另一个数据库上的对象的引用,则包是否无效?还是结构发生了变化?或者不管它是否编译?

  3. 我假设我第二次需要在 EXECUTE IMMEDIATE 字符串中 "CREATE OR REPLACE VIEW" 运行 这个过程,视图是否已经存在于数据库中?

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

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

现在,回答您的问题:

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