繁体   English   中英

如何检索用于在Oracle中创建视图的SQL?

[英]How to retrieve the SQL used to create a view in Oracle?

在Oracle中,要检索用于创建Function,Package等的SQL,可以查询user_source视图。 但是,视图不包含在此视图中 - 它们也不存在于基础sys.source$ 要访问视图文本,可以使用user_views.text列,但这并不准确,因为Oracle会重写部分查询,例如它会进行全局扩展。

如何在没有全局扩展的情况下检索用于创建视图的SQL,与输入完全一样?

您可以使用以下查询:

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS;

或者您可以使用ALL_VIEWS,如

SELECT VIEW_NAME, TEXT 
FROM ALL_VIEWS;

参考文献

Oracle®数据库参考上的ALL_VIEWS

我使用dbms_metadata.get_ddl如下:

select
dbms_metadata.get_ddl('VIEW', 'VIEW_NAME', 'VIEW_OWNER') 
from
dual;

以下是参数:

DBMS_METADATA.GET_DDL (
object_type     IN VARCHAR2,
name            IN VARCHAR2,
schema          IN VARCHAR2 DEFAULT NULL,
version         IN VARCHAR2 DEFAULT 'COMPATIBLE',
model           IN VARCHAR2 DEFAULT 'ORACLE',
transform       IN VARCHAR2 DEFAULT 'DDL')
RETURN CLOB;

它有一个公共同义词。 对于非用户拥有的对象,可以获得系统特权SELECT_CATALOG_ROLE,并且可以查看所有对象的所有DDL。

在Oracle SQL Developer中,可以在查询结果窗口中看到clob(许多人也创建了用于转换clob的实用程序)。

大多数SQL IDE工具都有一些DDL查看机制,虽然DBMS_METADATA是种子Oracle数据库功能(一个不需要一些花哨,昂贵的工具)。

我认为原文丢失了:

create table t1(id number)
/
create view t1_vw as select * from t1
/
alter table t1 add val varchar2(20)
/
alter view t1_vw compile
/
select * from t1_vw
/

将仅返回id列。 有趣,但对于物化视图,保留原始文本。

我认为作为开发人员,视图的兴趣是使其有效且可运行的“选择”,编辑视图的最简单方法是使用另一个应用程序,如pl / sql Developer或TOAD。

通过文本编辑器编辑oracle数据库中的任何对象,就像sqlplus.exe需要很长时间来完成简单的任务一样,这是一个令人头痛的方法。

在此输入图像描述

您可以使用数据字典视图(V $ SQL,V $ SQLTEXT)来查看输入的实际SQL。

请看相关问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM