복붙노트

[SQL] 어떻게 데이터를 복사하지 않고 Oracle 테이블의 복사본을 만들 수 있습니까?

SQL

어떻게 데이터를 복사하지 않고 Oracle 테이블의 복사본을 만들 수 있습니까?

나는 문을 알고있다 :

create table xyz_new as select * from xyz;

어떤 사본 난 그냥 구조를 원하는 구조와 데이터,하지만 경우에?

해결법

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

    1.그냥 행을 선택하지 않습니다 WHERE 절을 사용합니다 :

    그냥 행을 선택하지 않습니다 WHERE 절을 사용합니다 :

    create table xyz_new as select * from xyz where 1=0;
    

    다음과 같은 것들이 새 테이블에 복사되지 않습니다 :

    이 또한 파티션을 처리하지 않습니다

  2. ==============================

    2.난 당신이 많이 접수하는 방법을 사용하지만, 누군가가 지적으로 중복 제약하지 않는다 (NOT NULL을 제외하고, 나는 생각한다).

    난 당신이 많이 접수하는 방법을 사용하지만, 누군가가 지적으로 중복 제약하지 않는다 (NOT NULL을 제외하고, 나는 생각한다).

    당신이 전체 구조를 복제 할 경우 더 진보 된 방법은 다음과 같다 :

    SET LONG 5000
    SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME' ) FROM DUAL;
    

    이렇게하면 새 테이블을 만드는 원하는대로 수정할 수있는 전체 생성 문 텍스트를 제공 할 것입니다. 당신은 테이블의 이름과 과정의 모든 제약 조건을 변경해야합니다.

    (당신은 또한 EXP / IMP를 사용하여 이전 버전에서이 작업을 수행 할 수 있지만, 그것은 훨씬 쉽다.)

    추가 수정 됨 당신이 이후에있는 표는 다른 스키마에있는 경우 :

    SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ) FROM DUAL;
    
  3. ==============================

    3.SQL 개발자를 사용하여 테이블을 선택하고 DDL 탭을 클릭합니다

    SQL 개발자를 사용하여 테이블을 선택하고 DDL 탭을 클릭합니다

    당신은 SQL 워크 시트를 실행할 때 데이터가없는 새 테이블을 생성하는 코드를 사용할 수 있습니다

    sqldeveloper는 오라클에서 응용 프로그램을 사용하는 무료입니다.

    테이블 시퀀스 또는 트리거가있는 경우 DDL은 때때로 너무 당신을 위해 사람들을 생성합니다. 당신은 당신이 그들을하고 또는 해제 트리거를 설정하는 경우 알고 주문 무엇을 조심해야합니다.

  4. ==============================

    4.

    create table xyz_new as select * from xyz where rownum = -1;
    

    또 다시 반복 처리를 방지하고, 조건 1 = 2에 기초하여 아무것도 넣지하려면

  5. ==============================

    5.

        DECLARE
        l_ddl   VARCHAR2 (32767);
    BEGIN
        l_ddl      := REPLACE (
                          REPLACE (
                              DBMS_LOB.SUBSTR (DBMS_METADATA.get_ddl ('TABLE', 'ACTIVITY_LOG', 'OLDSCHEMA'))
                            , q'["OLDSCHEMA"]'
                            , q'["NEWSCHEMA"]'
                          )
                        , q'["OLDTABLSPACE"]'
                        , q'["NEWTABLESPACE"]'
                      );
    
        EXECUTE IMMEDIATE l_ddl;
    END; 
    
  6. ==============================

    6.이 작업을 수행 할 수 있습니다 작성 테이블 NEW_TABLE로   OLD_TABLE 선택 * 여기서 1 = 2; 하지만 조심   당신이 복용량 만들 표는 OLD_TABLE과 같은 어떤 색인, Pk의 등이없는

    이 작업을 수행 할 수 있습니다 작성 테이블 NEW_TABLE로   OLD_TABLE 선택 * 여기서 1 = 2; 하지만 조심   당신이 복용량 만들 표는 OLD_TABLE과 같은 어떤 색인, Pk의 등이없는

  7. ==============================

    7.

    SELECT * INTO newtable
    FROM oldtable
    WHERE 1 = 0;
    

    다른 사람의 스키마를 사용하여 비어있는 새 테이블을 만듭니다. 그냥 데이터를 돌아 오지 쿼리를 유발하는 WHERE 절을 추가 :

  8. ==============================

    8.당신도 할 수 있습니다

    당신도 할 수 있습니다

    create table abc_new as select * from abc; 
    

    다음 abc_new 테이블을 자릅니다. 이 귀하의 요구 사항을 충분 바랍니다.

  9. ==============================

    9.단순히 쿼리와 같은 쓰기 :

    단순히 쿼리와 같은 쓰기 :

    create table new_table as select * from old_table where 1=2;
    

    어디 NEW_TABLE하여 작성하려는 새 테이블의 이름과 OLD_TABLE이 구조를 복사 할 기존 테이블의 이름입니다, 이것은 단지 구조를 복사합니다.

  10. ==============================

    10.1 = 0 또는 유사한 거짓 조건은 작동하지만 나는 그들이 어떻게 보이는지 싫어하는 WHERE. 소폭 오라클 12C를위한 청소기 코드 + IMHO입니다

    1 = 0 또는 유사한 거짓 조건은 작동하지만 나는 그들이 어떻게 보이는지 싫어하는 WHERE. 소폭 오라클 12C를위한 청소기 코드 + IMHO입니다

    표 막대를 만들   고르다 *   foo는 FROM   FIRST 0 ROWS ONLY을 FETCH;

    같은 제한 사항이 적용에만 열 정의와 자신의 Null 허용 여부는 새 테이블로 복사됩니다.

  11. ==============================

    11.다른 방법으로 아래 나열된 명령 테이블 작성의 DDL 얻고, 생성을 실행할 수 있습니다.

    다른 방법으로 아래 나열된 명령 테이블 작성의 DDL 얻고, 생성을 실행할 수 있습니다.

    SELECT DBMS_METADATA.GET_DDL('TYPE','OBJECT_NAME','DATA_BASE_USER') TEXT FROM DUAL 
    

    이 명령을 사용하면 데이터베이스 개체에서 DDL의 대부분을 얻을 수 있습니다.

  12. ==============================

    12.

    Create table target_table 
    As
    Select * 
    from source_table 
    where 1=2;
    

    SOURCE_TABLE 유의 구조를 복사 싶어 테이블입니다.

  13. ==============================

    13.PL / SQL 개발자를 사용하면 바로 제약 모두와 함께 테이블을 작성하는 SQL 스크립트를 생성 "보기 SQL", "보기"를 클릭 이상의 클릭하지 않고, SQL 작업 영역 또는 개체 탐색기에서 어느 테이블 _ 이름을 클릭 할 수 , 인덱스, 파티션 등

    PL / SQL 개발자를 사용하면 바로 제약 모두와 함께 테이블을 작성하는 SQL 스크립트를 생성 "보기 SQL", "보기"를 클릭 이상의 클릭하지 않고, SQL 작업 영역 또는 개체 탐색기에서 어느 테이블 _ 이름을 클릭 할 수 , 인덱스, 파티션 등

    당신은 new_table_name를 사용하여 스크립트를 실행 다음으로

  14. ==============================

    14.

    create table <target_table> as select * from <source_table> where 1=2;
    
    create table <target_table> as select * from <source_table>;
    
  15. ==============================

    15.-이 테이블을 만들고 모든 데이터를 복사합니다.

    -이 테이블을 만들고 모든 데이터를 복사합니다.

    -이 같은 테이블 구조를하지만 복사 된 모든 데이터가 삭제됩니다.

    당신은 대답에 의해 지정된 한계를 극복하려면 : 어떻게 데이터를 복사하지 않고 Oracle 테이블의 복사본을 만들 수 있습니까?

  16. ==============================

    16.작업은 위의 두 가지 간단한 단계에서 완료 할 수 있습니다.

    작업은 위의 두 가지 간단한 단계에서 완료 할 수 있습니다.

    CREATE table new_table_name AS(Select * from old_table_name);
    

    위의 질의는 (물론 내용) 테이블의 중복을 만듭니다.

    구조를 얻으려면 사용하여 테이블의 내용을 삭제합니다.

    DELETE * FROM new_table_name.
    

    이 방법으로 문제가 해결 바랍니다. 그리고 이전 게시물에 대한 감사합니다. 나에게 통찰력을 많이했다.

  17. from https://stackoverflow.com/questions/233870/how-can-i-create-a-copy-of-an-oracle-table-without-copying-the-data by cc-by-sa and MIT license