반응형
SQL*Plus에서 Oracle create table 문을 가져오는 방법
Oracle 데이터베이스에 존재하지만 SQL Developer 도구의 테이블 목록에 표시되지 않는 테이블이 있습니다.하지만 SQL*Plus로 이동하여 다음 작업을 수행하는 경우
select table_name from user_tables;
저는 그 표를 목록에 올렸습니다.입력하면
desc snp_clearinghouse;
그것은 저에게 들판을 보여줍니다.필드를 추가해야 하기 때문에 create 문을 받고 싶습니다.필드를 추가하기 위해 테이블을 수정할 수 있지만 소스 제어에 넣을 create 문이 여전히 필요합니다.테이블에 대한 create 문을 가져오는 데 사용되는 pl/sql 문은 무엇입니까?
Get table 및 인덱스 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;
위와 동일하지만 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;
/
Oracle SQLcl 명령줄 클라이언트를 사용하는 경우 가장 간단한 방법은ddl
내장된 명령예를들면
ddl ownername.tablename
해당 테이블에 대한 전체 정의를 얻을 수 있습니다.경고: 대상 테이블에 따라 매우 길 수 있습니다.
언급URL : https://stackoverflow.com/questions/937398/how-to-get-oracle-create-table-statement-in-sqlplus
반응형
'programing' 카테고리의 다른 글
UIViewContentModeScaleAspectFit과 UIViewContentModeScaleToFill의 차이점은 무엇입니까? (0) | 2023.07.17 |
---|---|
프로그래머가 아닌 사람과 주피터 노트북을 공유하려면 어떻게 해야 합니까? (0) | 2023.07.17 |
pip 설치 실패: OSError: [Errno 13] 디렉터리에서 사용 권한이 거부됨 (0) | 2023.07.17 |
문자열 목록을 숫자로 정렬하는 방법은 무엇입니까? (0) | 2023.07.17 |
코코아 포드가 설치되지 않았거나 잘못된 상태임 (0) | 2023.07.17 |