복붙노트

[SQL] 오라클은 SQL * 플러스에서 CREATE TABLE 문을 얻는 방법

SQL

오라클은 SQL * 플러스에서 CREATE TABLE 문을 얻는 방법

나는 Oracle 데이터베이스에 존재하지만 도구 SQL Developer에서 테이블의 내 목록에 표시되지 않습니다 테이블이있다. 나는 SQL * 플러스로 이동 한 경우, 마십시오

select table_name from user_tables;

나는 나와있는 표를 얻을. 만약 I 형

desc snp_clearinghouse;

그것은 나에게 필드를 표시합니다. 내가 필드를 추가해야하기 때문에 나는 문을 만들 수 싶습니다. 나는 필드를 추가하기 위해 테이블을 수정할 수 있습니다,하지만 난 여전히 우리의 소스 제어에 넣어 문을 작성해야합니다. 무엇 PL / SQL 문은 테이블을 위해 문을 만들고 가져 오는 데 사용됩니다?

해결법

  1. ==============================

    1.가져 오기 테이블과 인덱스 DDL 쉬운 방법에서 :

    가져 오기 테이블과 인덱스 DDL 쉬운 방법에서 :

    set heading off;
    set echo off;
    Set pages 999;
    set long 90000;
    
    spool ddl_list.sql
    
    select dbms_metadata.get_ddl('TABLE','DEPT','SCOTT') from dual;
    
    select dbms_metadata.get_ddl('INDEX','DEPT_IDX','SCOTT') from dual;
    
    spool off;
    
  2. ==============================

    2.위하지만 일반 스크립트와 동일는 gen_create_table_script.sql 여기

    위하지만 일반 스크립트와 동일는 gen_create_table_script.sql 여기

    -- #############################################################################################
    --
    -- %Purpose: Generate 'CREATE TABLE' Script for an existing Table in the database
    --
    -- Use:      SYSTEM, SYS or user having SELECT ANY TABLE  system privilege
    --
    -- #############################################################################################
    --
    set serveroutput on size 200000
    set echo off
    set feedback off
    set verify off
    set showmode off
    --
    ACCEPT l_user CHAR PROMPT  'Username: '
    ACCEPT l_table CHAR PROMPT 'Tablename: '
    --
    DECLARE
     CURSOR TabCur IS
     SELECT table_name,owner,tablespace_name,
            initial_extent,next_extent,
            pct_used,pct_free,pct_increase,degree
       FROM sys.dba_tables
      WHERE owner=upper('&&l_user')
        AND table_name=UPPER('&&l_table');
    --
     CURSOR ColCur(TableName varchar2) IS
     SELECT column_name col1,
            DECODE (data_type,
                    'LONG',       'LONG   ',
                    'LONG RAW',   'LONG RAW  ',
                    'RAW',        'RAW  ',
                    'DATE',       'DATE   ',
                    'CHAR',       'CHAR' || '(' || data_length || ') ',
                    'VARCHAR2',   'VARCHAR2' || '(' || data_length || ') ',
                    'NUMBER',     'NUMBER' ||
                    DECODE (NVL(data_precision,0),0, ' ',' (' || data_precision ||
                    DECODE (NVL(data_scale, 0),0, ') ',',' || DATA_SCALE || ') '))) ||
            DECODE (NULLABLE,'N', 'NOT NULL','  ') col2
       FROM sys.dba_tab_columns
      WHERE table_name=TableName
        AND owner=UPPER('&&l_user')
     ORDER BY column_id;
    --
     ColCount    NUMBER(5);
     MaxCol      NUMBER(5);
     FillSpace   NUMBER(5);
     ColLen      NUMBER(5);
    --
    BEGIN
     MaxCol:=0;
     --
     FOR TabRec in TabCur LOOP
        SELECT MAX(column_id) INTO MaxCol FROM sys.dba_tab_columns
         WHERE table_name=TabRec.table_name
           AND owner=TabRec.owner;
        --
        dbms_output.put_line('CREATE TABLE '||TabRec.table_name);
        dbms_output.put_line('( ');
        --
        ColCount:=0;
        FOR ColRec in ColCur(TabRec.table_name) LOOP
          ColLen:=length(ColRec.col1);
          FillSpace:=40 - ColLen;
          dbms_output.put(ColRec.col1);
          --
          FOR i in 1..FillSpace LOOP
             dbms_output.put(' ');
          END LOOP;
          --
          dbms_output.put(ColRec.col2);
          ColCount:=ColCount+1;
          --
          IF (ColCount < MaxCol) THEN
             dbms_output.put_line(',');
          ELSE
             dbms_output.put_line(')');
          END IF;
        END LOOP;
        --
        dbms_output.put_line('TABLESPACE '||TabRec.tablespace_name);
        dbms_output.put_line('PCTFREE '||TabRec.pct_free);
        dbms_output.put_line('PCTUSED '||TabRec.pct_used);
        dbms_output.put_line('STORAGE ( ');
        dbms_output.put_line('  INITIAL     '||TabRec.initial_extent);
        dbms_output.put_line('  NEXT        '||TabRec.next_extent);
        dbms_output.put_line('  PCTINCREASE '||TabRec.pct_increase);
        dbms_output.put_line(' )');
        dbms_output.put_line('PARALLEL '||TabRec.degree);
        dbms_output.put_line('/');
     END LOOP;
    END;
    /
    
  3. from https://stackoverflow.com/questions/937398/how-to-get-oracle-create-table-statement-in-sqlplus by cc-by-sa and MIT license