使用Toad在Oracle中创建视图时,如何存储格式化脚本呢?

时间:2012-07-04 08:01:22

标签: oracle toad sql-view

这个问题可能是蟾蜍特有的。我不知道Oracle如何存储视图,所以我将解释当我使用Toad时会发生什么。如果我得到一个特定于Oracle的答案,那就更好了。

我创造了一个相当复杂的观点。为了更清楚,我已经很好地格式化了代码,并在需要时输入了一些注释。当我需要对视图进行更改时,我使用Toad的“描述对象”窗口,在那里我可以找到一个脚本来重新创建视图。唯一的问题是我的所有格式都消失了。 select关键字之前的注释(但在“create view xxx as”之后)也将消失。

如果我输入此脚本来创建视图:

create or replace view TestViewFormatting as
-- Here I have a long comment explaining the role of the 
-- view and certain things to be aware of if changing it. 
-- Unfortunately this comment will disappear...
select 
  name,          --This comment will be kept
  accountnumber  --This also
from
  debtable
where
  name like 'S%';

Toad将在稍后描述时显示:

DROP VIEW XXX.TESTVIEWFORMATTING;

/* Formatted on 04.07.2012 09:35:45 (QP5 v5.185.11230.41888) */
CREATE OR REPLACE FORCE VIEW XXX.TESTVIEWFORMATTING
(
   NAME,
   ACCOUNTNUMBER
)
AS
   select name,                                    --This comment will be kept
               accountnumber                                       --This also
     from debtable
    where name like 'S%';

请注意,第一条评论已消失,格式完全不同。

我怀疑Oracle不存储视图的代码,只存储一些已解析的版本,并且当Toad启动脚本时,它会反转此解析版本并动态生成脚本。

要使Toad / Oracle保留原始格式,我需要做些什么?

(PS:我知道我可以更改Toad代码格式化程序的设置,但这不是我想要做的。由于我过去的一些有问题的选择,这个特殊的视图有几个级别的内联视图,我需要一个非常具体的格式,以明确发生了什么)

2 个答案:

答案 0 :(得分:4)

select text from user_views
where view_name = 'YOUR_VIEW_NAME';

我测试过:

create view z_v_test as 
select
-- te

--st
* from 
dual;

它甚至保持空白。

答案 1 :(得分:2)

另一种方法是使用DBMS_METADATA:

select dbms_metadata.get_ddl('VIEW', 'YOUR_VIEW_NAME', user) from dual

这不仅适用于视图,也适用于(几乎)所有类型的数据库对象(表,触发器,函数......)。