2009-10-13 47 views
1

我有几个SQL脚本设置应用程序的数据库。几乎没有创建包含少量视图引用的包的脚本,并且同样具有创建包含引用的视图的脚本。简化包和视图的创建

有没有办法将这两个脚本分开,然后分别单独创建包或视图。

或任何其他工作。

+0

添加'循环参考'文本希望它会被添加到SO索引,并帮助其他人找到这个好问题和答案。 – 2017-09-19 23:17:16

回答

1

我想你必须手动计算参考图形,然后相应地命令脚本的执行。因此,您需要创建一组脚本views1.sql,views2.sql,...和packages1.sql,packages2.sql,... Views1.sql仅包含未引用任何包的视图。 Packages1.sql仅包含未引用任何视图的软件包。 Views2.sql仅包含引用来自packages1.sql的包的视图。 Packages2.sql仅包含引用来自views1.sql的视图的软件包。

依此类推,直到完成。

+0

@ rics。 +1。感谢你的及时回复。事实上,我通过按顺序调用脚本来做同样的事情。想知道是否有更好的方法来处理它。 – Viky 2009-10-13 07:09:01

+0

我有一个引用视图的包,其中相同的视图引用了包中的另一个函数。不知道这个想法是否有效。我最终编译了Spec,然后是引用包的视图,然后是Body。谢谢。 – 2017-09-19 23:13:54

3

你可以只创建第一个使用语法

CREATE OR REPLACE FORCE VIEW 

即使还不存在引用的对象,然后创建您的所有包装规格,然后机构内创建一个视图中的所有的意见。

现在你可以编译所有无效的对象,或只是让Oracle照顾它(见本链接)

Ask Tom - "invalid objects"

4

首先,创建包规范。

其次,创建视图 - 它们引用规范,而不是正文。

三,创建包体 - 它们引用视图。

+0

工作就像一个魅力。我们的DBA比较喜欢所有的DDL编译,所以这比编译无效更好。第一次遇到这种情况时,有一个视图引用了包中的函数,而包中的另一个函数引用了相同的视图。带我一边找到这个 - 使用循环引用作为我的搜索条件。 – 2017-09-19 23:11:20