在Oracle中,要检索用于创建函数、包等的SQL,可以查询user_source视图。但是,视图不包括在此视图中-它们也不存在于基础sys.source$
中。要访问视图的文本,可以使用Oracle列,但这并不准确,因为user_views.text
将重写查询的某些部分,例如,它将执行全局扩展。
如何检索用于创建视图的SQL,与输入的视图完全相同,而不进行全局扩展?
发布于 2014-04-25 21:31:09
我认为原文丢失了:
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列。这很有趣,但对于物化视图,原始文本将被保留。
发布于 2014-04-25 22:20:11
我使用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数据库的种子功能(不需要一些花哨、昂贵的工具)。
发布于 2014-04-25 21:01:34
我认为作为开发人员,视图的兴趣在于使其有效和可运行的"select“,而编辑视图的最简单方法是使用另一个应用程序,如pl/sql developer或TOAD。
对于简单的任务,仅使用文本编辑器(如sqlplus.exe )来编辑oracle数据库中的任何对象都需要很长时间,而且这是一种令人头疼的方法。
https://stackoverflow.com/questions/23292159
复制相似问题