通过有限的控制获取Oracle View Definition

时间:2015-06-28 19:42:51

标签: oracle plsql

我的问题是我有一个自定义SQL运行器命中Oracle,只读db。

我想获得一个视图的定义。

 select TEXT
 FROM all_VIEWS
 and VIEW_NAME  = '<view_name>';

这让我回复了有限的文字。最多这么多字符,可能是100.所有视图都比这长。

我找到的帮助文件显示添加了长10000&#39;我猜之前捕捉整个领域。

SQL> set long 10000

SQL> select TEXT
  2  FROM all_VIEWS
  3  and VIEW_NAME  = '<view_name>';

由于我正在浏览另一个窗口,因此我无法访问set long 10000。还有另一种方法可以用我有限的能力来获得完整的定义吗?

2 个答案:

答案 0 :(得分:8)

您的问题是包含视图定义的LONG列。

您可以使用DBMS_METADATA包将视图文本作为CLOB

获取
select DBMS_METADATA.GET_DDL ('VIEW','view_name','owner') from dual;

答案 1 :(得分:0)

使用@ Marmite对DBMS_METADATA.GET_DDL的建议,并假设您使用的工具只允许您一次检索100个字符,以下内容应检索您的完整视图:

SELECT view_name, LEVEL "Line No", 
DBMS_LOB.SUBSTR(view_clob, 100 ,1 + (LEVEL-1)*100) line_text FROM (
    SELECT view_name, owner, 
    DBMS_METADATA.GET_DDL('VIEW', view_name, owner) view_clob 
    FROM all_views WHERE view_name = '<view_name>'
) CONNECT BY LEVEL <= CEIL(LENGTHB(view_clob)/100) ORDER BY LEVEL;