从 PL/SQL 包中的动态字符串(立即执行)创建数据库视图 - 有问题吗?
Creating a database view from a dynamic string (EXECUTE IMMEDIATE) in a PL/SQL package - Questions?
我想在 运行 时间创建一个动态视图,该视图由一串列和一个 where 子句组成,在一个数据库上使用 EXECUTE IMMEDIATE,将在第二个数据库上使用 db_link 查询.
我的问题如下。
视图将在另一个数据库上使用 database_link 查询,我是否还需要授予视图的权限(即 PUBLIC)和同义词(如 PUBLIC) 同时(如果有的话)?还是只需要创建一次?
如果在 PL/SQL 包中存在通过不存在的数据库 link 对另一个数据库上的对象的引用,则包是否无效?还是结构发生了变化?或者不管它是否编译?
我假设我第二次需要在 EXECUTE IMMEDIATE 字符串中 "CREATE OR REPLACE VIEW" 运行 这个过程,视图是否已经存在于数据库中?
提前感谢大家对此的任何反馈。
首先,我建议你不要那样做。在 Oracle 中,对象被创建一次,并且您可以随时使用。您希望动态创建视图有什么好处? (我不是说你一定不能做,只是建议你考虑一下)。
现在,回答您的问题:
- 您不需要
GRANT
因为 - 为了创建数据库 link,您已经知道远程数据库的用户名和密码
- 如果另一个数据库中的对象无效,则执行或编译您的过程将失败
- 是的,因为没有
or replace
Oracle 会抱怨该名称的对象已经存在。
我想在 运行 时间创建一个动态视图,该视图由一串列和一个 where 子句组成,在一个数据库上使用 EXECUTE IMMEDIATE,将在第二个数据库上使用 db_link 查询.
我的问题如下。
视图将在另一个数据库上使用 database_link 查询,我是否还需要授予视图的权限(即 PUBLIC)和同义词(如 PUBLIC) 同时(如果有的话)?还是只需要创建一次?
如果在 PL/SQL 包中存在通过不存在的数据库 link 对另一个数据库上的对象的引用,则包是否无效?还是结构发生了变化?或者不管它是否编译?
我假设我第二次需要在 EXECUTE IMMEDIATE 字符串中 "CREATE OR REPLACE VIEW" 运行 这个过程,视图是否已经存在于数据库中?
提前感谢大家对此的任何反馈。
首先,我建议你不要那样做。在 Oracle 中,对象被创建一次,并且您可以随时使用。您希望动态创建视图有什么好处? (我不是说你一定不能做,只是建议你考虑一下)。
现在,回答您的问题:
- 您不需要
GRANT
因为 - 为了创建数据库 link,您已经知道远程数据库的用户名和密码 - 如果另一个数据库中的对象无效,则执行或编译您的过程将失败
- 是的,因为没有
or replace
Oracle 会抱怨该名称的对象已经存在。