5

这个问题可能是蟾蜍特有的。我不知道 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 的代码格式化程序的设置,但这不是我想要做的。由于我过去的一些有问题的选择,这个特定的视图有几个级别的内联视图,我需要一个非常具体的格式化以明确发生了什么)

4

2 回答 2

5
select text from user_views
where view_name = 'YOUR_VIEW_NAME';

我已经测试过:

create view z_v_test as 
select
-- te

--st
* from 
dual;

它甚至保留了空白行。

于 2012-07-04T13:05:14.930 回答
2

另一种方法是使用 DBMS_METADATA:

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

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

于 2012-07-05T07:36:25.947 回答