我的问题是我有一个自定义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
。还有另一种方法可以用我有限的能力来获得完整的定义吗?
答案 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;