답변:
행을 선택하지 않는 where 절을 사용하십시오.
create table xyz_new as select * from xyz where 1=0;
다음 사항은 새 테이블에 복사되지 않습니다.
이것은 또한 파티션을 처리하지 않습니다
나는 당신이 많이 받아 들인 방법을 사용했지만 누군가 지적한 것처럼 제약 조건을 복제하지 않습니다 (NOT NULL 제외).
전체 구조를 복제하려는 경우 고급 방법은 다음과 같습니다.
SET LONG 5000
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME' ) FROM DUAL;
그러면 새 테이블을 만들 때 원하는대로 수정할 수있는 전체 create 문 텍스트가 제공됩니다. 테이블 이름과 모든 제약 조건을 변경해야합니다.
(EXP / IMP를 사용하여 이전 버전에서도이 작업을 수행 할 수 있지만 훨씬 쉬워졌습니다.)
추가하기 위해 편집 한 테이블 뒤에 다른 스키마가있는 경우 :
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ) FROM DUAL;
My_table_name
기존 테이블입니다. 그러나 새 테이블 이름을 어떻게 만들 수 있습니까?
new_table = dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ).
한편 LONG이 여기서 무엇을하는지 알려주십시오.
SQL Developer를 사용하여 테이블을 선택하고 DDL 탭을 클릭하십시오.
이 코드를 사용하여 SQL 워크 시트에서 실행할 때 데이터가없는 새 테이블을 만들 수 있습니다
sqldeveloper는 oracle의 무료 앱입니다.
테이블에 시퀀스 또는 트리거가있는 경우 ddl은 때때로 해당 시퀀스 또는 트리거도 생성합니다. 어떤 순서로 정렬해야하는지, 트리거를 언제 켜거나 끄는 지 알아야합니다.
SQL
다음과 같은 쿼리를 작성하십시오.
create table new_table as select * from old_table where 1=2;
여기서 new_table
작성하려는 새 테이블 old_table
의 이름이고 구조를 복사하려는 기존 테이블의 이름입니다. 구조 만 복사합니다.
다른 방법으로 아래 나열된 명령에서 테이블 생성 ddl을 가져 와서 생성을 실행할 수 있습니다.
SELECT DBMS_METADATA.GET_DDL('TYPE','OBJECT_NAME','DATA_BASE_USER') TEXT FROM DUAL
TYPE
인 TABLE
, PROCEDURE
등등이 명령을 사용하면 데이터베이스 오브젝트에서 대부분의 ddl을 얻을 수 있습니다.
GET_DDL
는 대소 문자를 구분합니다.
pl / sql 개발자를 사용하면 SQL 작업 영역이나 객체 탐색기에서 table_name을 마우스 오른쪽 버튼으로 클릭하고 "view"를 클릭하고 "view sql"을 클릭하여 SQL 스크립트를 생성하여 모든 제약 조건과 함께 테이블을 생성 할 수 있습니다 , 인덱스, 파티션 등
다음으로 new_table_name을 사용하여 스크립트를 실행하십시오.
- xyz_new 테이블을 select * from xyz로 작성하십시오.
-테이블을 생성하고 모든 데이터를 복사합니다.
- xyz_new에서 삭제;
-테이블 구조는 동일하지만 복사 된 모든 데이터가 삭제됩니다.
답변으로 지정된 제한 사항을 극복 하려면 데이터를 복사하지 않고 Oracle 테이블의 복사본을 어떻게 만들 수 있습니까?
위의 작업은 두 가지 간단한 단계로 완료 할 수 있습니다.
CREATE table new_table_name AS(Select * from old_table_name);
는 query
위의 (내용뿐만 아니라) 테이블의 중복을 만듭니다.
구조를 얻으려면을 사용하여 테이블의 내용을 삭제하십시오.
DELETE * FROM new_table_name.
이것이 문제를 해결하기를 바랍니다. 그리고 이전 게시물 덕분에. 많은 통찰력을주었습니다.
truncate
버전 보다 훨씬 덜 효율적 입니다. 모든 데이터에 대한 범위를 할당 할뿐만 아니라 삭제하여이를 해제하지 않으므로 테이블이 이전 크기로 커지지 않으면 공간이 낭비 될 수 있습니다. 그리고 삽입과 삭제 모두에서 실행 취소 / 다시 실행을 생성하고 있습니다. Jim의 답변은 그 모든 것을 피합니다.