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

And*_*rew 14 sql oracle

在Oracle中,要检索用于创建Function,Package等的SQL,可以查询user_source视图.但是,视图不包含在此视图中 - 它们也不存在于底层视图中sys.source$.要访问视图文本,user_views.text可以使用该列,但这并不准确,因为Oracle将重新编写查询的某些部分,例如它将执行glob扩展.

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

Jos*_*h B 18

您可以使用以下查询:

SELECT VIEW_NAME, TEXT
FROM USER_VIEWS;
Run Code Online (Sandbox Code Playgroud)

或者您可以使用ALL_VIEWS,如

SELECT VIEW_NAME, TEXT 
FROM ALL_VIEWS;
Run Code Online (Sandbox Code Playgroud)

参考文献:

Oracle®数据库参考上的ALL_VIEWS

  • 安德鲁已经在一个问题中提到了user_views. (4认同)

Pat*_*con 5

我使用 dbms_metadata.get_ddl 如下:

select
dbms_metadata.get_ddl('VIEW', 'VIEW_NAME', 'VIEW_OWNER') 
from
dual;
Run Code Online (Sandbox Code Playgroud)

下面是参数:

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;
Run Code Online (Sandbox Code Playgroud)

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

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

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


vav*_*vav 2

我认为原文已丢失:

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
/
Run Code Online (Sandbox Code Playgroud)

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