表结构获取方法( 包括处理输出异常换行问题 )

set pages 0;
set long 99999;
set feedback off;
set echo off;
set heading off;
set termout off;
set linesize 500;

spool get_table_strc.sql

select 'select dbms_metadata.get_ddl(''TABLE'',''' || table_name || ''',''' || owner || ''') from dual;'
from dba_tables where owner = '<owner_name>' order by table_name;

spool off

-- 解决“使用 dbms_metadata.get_ddl 查询表结构时经常出现异常的换行,导致语句无法直接执行”的方法:

select cast(dbms_metadata.get_ddl('TABLE','MYTABLE1','MYUSER') as varchar2(4000)) from dual;

示例:

SQL> set pages 0;
SQL> set long 99999;
SQL> set feedback off;
SQL> set echo off;
SQL> set heading off;
SQL> set termout off;
SQL> set linesize 500;
SQL> select dbms_metadata.get_ddl('TABLE','MYTABLE1','MYUSER') from dual;

  CREATE TABLE "MYUSER"."MYTABLE1"
   (    "ID" NUMBER(*,0),
        "ADDRS" VARCHAR2(20)
   ) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 2
55
 NOCOMPRESS LOGGING
  TABLESPACE "USERS"

SQL> select cast(dbms_metadata.get_ddl('TABLE','MYTABLE1','MYUSER') as varchar2(4000)) from dual;

  CREATE TABLE "MYUSER"."MYTABLE1"
   (    "ID" NUMBER(*,0),
        "ADDRS" VARCHAR2(20)
   ) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  TABLESPACE "USERS"

SQL> 
 

--关闭创建表的PCTFREE、NOCOMPRESS等属性
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);

示例:

SQL> set pages 0;
SQL> set long 99999;
SQL> set feedback off;
SQL> set echo off;
SQL> set heading off;
SQL> set termout off;
SQL> set linesize 500;
SQL> select dbms_metadata.get_ddl('TABLE','MYTABLE1','MYUSER') from dual;

  CREATE TABLE "MYUSER"."MYTABLE1"
   (    "ID" NUMBER(*,0),
        "ADDRS" VARCHAR2(20)
   ) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 2
55
 NOCOMPRESS LOGGING
  TABLESPACE "USERS"

SQL> EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);
SQL> select dbms_metadata.get_ddl('TABLE','MYTABLE1','MYUSER') from dual;

  CREATE TABLE "MYUSER"."MYTABLE1"
   (    "ID" NUMBER(*,0),
        "ADDRS" VARCHAR2(20)
   )

SQL> 
 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值