【问题标题】:When using Toad to create a view in Oracle, how can I store the formatted script also?使用 Toad 在 Oracle 中创建视图时,如何存储格式化脚本?
【发布时间】:2012-07-04 16:57:21
【问题描述】:

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

我创建了一个相当复杂的视图。为了更清楚,我已经很好地格式化了代码,并在需要的地方输入了一些 cmets。当我需要对视图进行更改时,我使用 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 的代码格式化程序的设置,但这不是我想要做的。由于我过去的一些有问题的选择,这个特定的视图有几个级别的内联视图,我需要一个非常具体的格式,以明确发生了什么)

【问题讨论】:

  • 据我所知,Oracle 在实际选择之前删除了任何评论。所以你将无法保留它。源的其余部分保留为由 SQL 客户端发送。虽然我不知道 TOAD,所以我不知道如何配置它以显示原始代码
  • 把评论放在SELECT关键字后面:)。
  • @Florin:是的,这就是我现在所做的,但这很容易解决。真正的问题是格式。
  • @SveinBringsli 我所知道的保留格式的唯一方法是保留视图的副本是一些版本控制系统并强制每个人在修改视图时使用它。

标签: oracle toad sql-view


【解决方案1】:
select text from user_views
where view_name = 'YOUR_VIEW_NAME';

我已经测试过:

create view z_v_test as 
select
-- te

--st
* from 
dual;

它甚至保留空白行。

【讨论】:

  • 我不得不将“name”更改为“view_name”。我不知道这是否与 Oracle 版本有关,或者是否是一个错字。无论如何,它按预期工作。谢谢:-)
【解决方案2】:

另一种方法是使用 DBMS_METADATA:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多