sql >> データベース >  >> RDS >> Oracle

Oracleにテーブルをドロップする方法

    • ドロップテーブル oracleコマンドは、データベースからテーブルを削除するために使用されます。
    • 削除されたテーブルとそのデータは、選択できなくなります。テーブルを削除すると、インデックスとそれに関連付けられたトリガーが削除されます。
    • Oracleビュー、シノニムは削除されませんが、無効になります
    • ドロップされたテーブルは、ごみ箱で利用可能な場合、FLASHBACKユーティリティを使用して回復できます。この機能は10g以降で利用できます
    • テーブルの作成者のみがテーブルを削除できます。または、テーブルの削除権限を持つユーザーのみがテーブルを削除できます

    ドロップテーブルオラクルの構文

    DROP TABLE [TABLE NAME] [PURGE]

    次のステートメントは、テーブルを削除してごみ箱に入れます。

    DROP TABLE TEST;

    以下のステートメントを使用して、ごみ箱から復元できます

    FLASHBACK TABLE TEST TO BEFORE DROP;

    以下のステートメントは、テーブルを削除し、ごみ箱からもフラッシュします。

    DROP TABLE TEST PURGE;

    ドロップテーブルカスケード制約

    ドロップされたテーブルの主キーと一意キーを参照するすべての参照整合性制約を削除するには、CASCADECONSTRAINTSを指定する必要があります。この句を省略し、そのような参照整合性の制約が存在する場合、データベースはエラーを返し、テーブルを削除しません。

    CREATE TABLE "EMP"
    ( "EMPNO" NUMBER(6,0),
    "ENAME" VARCHAR2(10),
    "JOB" VARCHAR2(9),
    "MGR" NUMBER(4,0),
    "HIREDATE" DATE,
    "SAL" NUMBER(7,2),
    "COMM" NUMBER(7,2),
    "DEPTNO" NUMBER(2,0),
    CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
    CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
    REFERENCES "DEPT" ("DEPTNO") ENABLE
    );
    CREATE TABLE "DEPT"
    ( "DEPTNO" NUMBER(2,0),
    "DNAME" VARCHAR2(14),
    "LOC" VARCHAR2(13),
    CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
    ;
    SQL> desc emp
    Name Null? Type
    ----------------------------------------- -------- -----------------------
    EMPNO NOT NULL NUMBER(6)
    ENAME VARCHAR2(10)
    JOB VARCHAR2(9)
    MGR NUMBER(4)
    HIREDATE DATE
    SAL NUMBER(7,2)
    COMM NUMBER(7,2)
    DEPTNO NUMBER(2)SQL>
    SQL> desc dept
    Name Null? Type
    ----------------------------------------- -------- -----------------------
    DEPTNO NOT NULL NUMBER(2)
    DNAME VARCHAR2(14)
    LOC VARCHAR2(13)
    SQL>
    insert into DEPT values(10, 'ACCOUNTING', 'NEW YORK');
    insert into dept values(20, 'RESEARCH', 'DALLAS');
    insert into dept values(30, 'RESEARCH', 'DELHI');
    insert into dept values(40, 'RESEARCH', 'MUMBAI');
    insert into emp values( 7698, 'BLAKE', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 );
    insert into emp values( 7782, 'CLARK', 'MANAGER', 7839, to_date('9-6-2008','dd-mm-yyyy'), 2450, null, 10 );
    insert into emp values( 7788, 'SCOTT', 'ANALYST', 7566, to_date('9-6-2012','dd-mm-yyyy'), 3000, null, 20 );
    insert into emp values( 7789, 'TPM', 'ANALYST', 7566, to_date('9-6-2017','dd-mm-yyyy'), 3000, null, null );
    insert into emp values( 7560, 'T1OM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, 20 );
    insert into emp values( 7790, 'TOM', 'ANALYST', 7567, to_date('9-7-2017','dd-mm-yyyy'), 4000, null, null );
    SQL> select * from emp;
    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
    7698 BLAKE MANAGER 7839 01-MAY-07 2850 10
    7782 CLARK MANAGER 7839 09-JUN-08 2450 10
    7788 SCOTT ANALYST 7566 09-JUN-12 3000 20
    7789 TPM ANALYST 7566 09-JUN-17 3000
    7790 TOM ANALYST 7567 09-JUL-17 4000
    4534 xyz 1000 20
    4576 abc 1000
    7560 T1OM ANALYST 7567 09-JUL-17 4000 20
    SQL> drop table dept;
    drop table dept
    *
    ERROR at line 1:
    ORA-02449: unique/primary keys in table referenced by foreign keys
    SQL>
    SQL> drop table dept cascade constraints;
    Table dropped.
    Oracleで複数のテーブルを削除する方法

    1つのステップで複数のテーブルを削除する必要がある場合があります

    begin
    execute immediate 'drop table t_name_1';
    execute immediate 'drop table t_name_2';
    end;

    スキーマ内のすべてのテーブルを削除する方法

    spool drop_table_schema.sql
    select 'drop table '||table_name||';'  from user_tables
    spool off
    

    @drop_table_schema.sql

    Oracleに存在する場合はテーブルを削除します

    コードでエラーがスローされないように、テーブルの存在を確認したい場合があります。 MySQL、SQLサーバーでは、dropステートメントを使用しているときにexists句がありますが、oracleにはそのような句はありません。

    PLSQL匿名ブロックを使用して同じことを実現できます

    DECLARE
    count INT; BEGIN
    SELECT Count(*)
    INTO count
    FROM dba_tables
    WHERE owner = '<schema name>'
    AND table_name = '<table name>'; IF count = 1 THEN
    EXECUTE IMMEDIATE 'drop table test';
    END IF;
    END;

    Oracleのdroptableステートメントの内容が気に入っていただければ幸いです。フィードバックを教えてください

    推奨読書

    Oracleドキュメント
    SQLFAQ

    関連記事

    oracleでテーブルを更新する方法:oracleのupdateステートメントは、oracleテーブルの既存の行を変更するために使用されます。更新は複数の方法で実行できます。
    OracleでTABLEを切り捨てる方法:OracleでTABLEを切り捨てる方が、Oracleのテーブルから削除するよりも高速です。これはDDLステートメントであり、ondeleteトリガーを起動しません。
    oracleで行を削除する方法:oracleのテーブルからの削除は、行を削除するために使用されます。 DELETE行は、EXISTS / NOT EXISTS句、サブクエリに基づくテーブル、カスケード
    Oracleのテーブルの変更
    OracleのINSERTステートメント
    Oracleのテーブル構文の作成
    主キーを使用して実行できます。 Oracleで


    1. MariaDBのTRIM()とTRIM_ORACLE()の違い

    2. MySQLエラー1093-FROM句で更新するターゲットテーブルを指定できません

    3. Oracle PL / SQL:DMLパッケージをオンラインで作成

    4. グループごとに最初と最後の行から値を取得します