Oracle Spool - 缺少补充信息

时间:2016-03-14 09:40:01

标签: oracle dll metadata spool

我正在尝试从表格元数据中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?

3 个答案:

答案 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;