达梦自定义存储过程实现获取表完整的ddl语句

发布于:2025-08-14 ⋅ 阅读:(13) ⋅ 点赞:(0)
--导出表的ddl
CREATE OR REPLACE PROCEDURE show_create_table( db IN varchar(255), tb IN varchar(255)) AS
    sql1 text;
    ret text := '';
    cmt text :='';
    sql2 text :=''; 
BEGIN
 FOR WSX IN (select TABLEDEF(db,tb) as ddl from dual) LOOP
  ret:= ret||WSX.DDL;
 END LOOP;
 ret := ret||chr(10);
 -- print ret;
 FOR ZXCV IN (select INDEX_NAME from ALL_INDEXES where TABLE_OWNER=db and TABLE_NAME=tb ) LOOP
         sql1 := 'select dbms_metadata.get_ddl(''INDEX'','''||ZXCV.INDEX_NAME||''','''||db||''') from dual';
         for QAZ IN (select dbms_metadata.get_ddl('INDEX',ZXCV.INDEX_NAME,DB)as DDL from dual ) LOOP
          ret:= ret||QAZ.DDL;
          ret := ret||chr(10);
         END LOOP;
    END LOOP;
    -- print ret;
    ret := ret||chr(10);
    ret := ret||chr(13);

 FOR TAB_CMT IN (select * from DBA_TAB_COMMENTS where OWNER=db AND TABLE_NAME=tb) LOOP
  cmt:= cmt||'COMMENT ON TABLE '||TAB_CMT.OWNER||'.'||TAB_CMT.TABLE_NAME||' IS '''''||TAB_CMT.COMMENTS||''''';'||char(10);
 END LOOP;
 FOR COL_CMT IN (select * from DBA_COL_COMMENTS where OWNER=db AND TABLE_NAME=tb) LOOP
  cmt:= cmt||'COMMENT ON COLUMN '||COL_CMT.OWNER||'.'||COL_CMT.TABLE_NAME||'('||COL_CMT.COLUMN_NAME||') IS '''''||COL_CMT.COMMENTS||''''';'||char(10);
 END LOOP;
 --print cmt;
 print '-----------------------------';
 --sql2 := 'select '''||  ret ||'''  as ddl' ; 
 sql2:= 'select '||'''' ||ret ||char(10)||cmt ||''''|| ' as ddl';
--print sql2;
--print cmt;
EXECUTE IMMEDIATE sql2;
END;

-- 使用示例
CALL show_create_table('SCHEMA_NAME','TABLE_NAME');

此内容引用自此处:dbms_metadata.get_ddl生成建表语句时没有字段描述 | 达梦技术社区