我正在尝试从表格元数据中Spool
获取信息。但是文本文件在第二行结束。它不显示完整的元数据
SPOOL P_TABLES.txt
set linesize 10000
set trimspool on
set heading on
SELECT DBMS_METADATA.GET_DDL('TABLE','TABLE_X') FROM DUAL;
SPOOL OFF;
它导出文本文件但不提供完整信息。
> SELECT DBMS_METADATA.GET_DDL('TABLE','TESI_STAMPDUTYLABELSVALUE') FROM DUAL
CREATE TABLE "ESIXUSER"."TESI_STAMPDUTYLABELSVALUE"
( "SVUNIDOCREFID" VAR...
//Nothing after this in .txt file.
在Oracle SQL Developer中,我可以检查完整的DLL。
我是否在sql文件中更改了lineize?
答案 0 :(得分:1)
我不确定这是否有效,但
点击此处(http://www.dba-oracle.com/t_1_dbms_metadata.htm"这可能对您有帮助")
我认为你错过了这些:
设置标题 设置回声关闭 设置第999页 设置长90000
答案 1 :(得分:1)
GET_DDL
会返回CLOB
,这可能很难直接打印出来。
如果您需要打印结果,可能需要扫描CLOB
打印行的内容:
declare
vClob clob;
PROCEDURE print_clob (
pClob IN OUT NOCOPY CLOB
)
IS
kLineTerminator VARCHAR2(1) := CHR(10);
vlgh_file NUMBER := 0;
vLineEndPos INTEGER;
vROW VARCHAR2(32767);
vOffset NUMBER := 1;
BEGIN
vlgh_file := DBMS_LOB.GETLENGTH(pClob);
--
while (vOffset < vlgh_file) LOOP
vLineEndPos := DBMS_LOB.INSTR(pClob, kLineTerminator, vOffset);
if (vLineEndPos = 0) then
vLineEndPos := vlgh_file +1 ;
end if;
vROW := RTRIM(NVL(DBMS_LOB.SUBSTR(pClob, vLineEndPos - vOffset, vOffset),'--'));
vOffset := vLineEndPos;
DBMS_OUTPUT.PUT_LINE(vROW);
vOffset := vOffset + 1;
END LOOP;
END print_clob;
begin
select DBMS_METADATA.GET_DDL('TABLE','TEST_DDL') into vClob from dual;
--
print_clob(vClob);
end;
/
答案 2 :(得分:0)
SET LONG 1000000000
SET LINESIZE 10000
SPOOL ABC.TXT
SELECT DBMS_METADATA.GET_DDL('TABLE','TABLE_X') FROM DUAL;
SPOOL OFF;