[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.가져 오기 테이블과 인덱스 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.위하지만 일반 스크립트와 동일는 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; /
from https://stackoverflow.com/questions/937398/how-to-get-oracle-create-table-statement-in-sqlplus by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 SQL에서 'YYYY'와 'RRRR'의 차이점은 무엇입니까 (0) | 2020.05.13 |
---|---|
[SQL] 쉼표로 구분 된 목록 건물? (0) | 2020.05.13 |
[SQL] 왜 그렇게 높은 윈도우 집계 함수에 대한 읽고 논리적인가? (0) | 2020.05.13 |
[SQL] 로 ... 파티션 (이상 ROW_NUMBER ()의 sqlite가 동등한? (0) | 2020.05.13 |
[SQL] 2005 SQL - 열은 여러 번 지정 (0) | 2020.05.13 |