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

Oracleデータベースのテーブル名変更列を変更します

    Oracleでは、テーブル内の既存の列の名前を変更できます。 ALTERTABLEステートメントのRENAMECOLUMN句を使用して、列の名前を変更します。つまり、Oracleのテーブルの名前変更列を変更します

    構文

    ALTER TABLE table_name
    RENAME COLUMN old_name to new_name;

    この例を見てみましょう

    SQL> CREATE TABLE DEPT_MASTER (
    dept_nr NUMBER UNIQUE,
    dept_name varchar2(100) NOT NULL,
    dept_status NUMBER(1,0) NOT NULL,
    created_at date
    ); 
    Table created.
    
    SQL> Desc DEPT_MASTER

    今すぐ列の名前を変更しましょう

    SQL> ALTER TABLE DEPT_MASTER
    RENAME COLUMN DEPT_NR to DEPT_NR_NEW;
    Table altered.
    
    SQL>Desc DEPT_MASTER

    制限と許可される内容

    (1)1つのステートメントで複数の名前を変更することはできません

    例で見てみましょう。

    SQL> ALTER TABLE DEPT_MASTER
    RENAME COLUMN DEPT_NR_NEW to DEPT_NR, DEPT_NAME to DEPT_N;
    2 ALTER TABLE DEPT_MASTER
    *
    ERROR at line 1:
    ORA-23290: This operation may not be combined with any other operation
    
    SQL> ALTER TABLE DEPT_MASTER
    RENAME COLUMN DEPT_NR_NEW to DEPT_NR,COLUMN DEPT_NAME to DEPT_N;
    2 ALTER TABLE DEPT_MASTER
    *
    ERROR at line 1:
    ORA-23290: This operation may not be combined with any other operation

    したがって、2列を含めようとすると、ORAエラーが発生します。複数の列を変更するには、個別のステートメントを実行する必要があります。

    ALTER TABLE DEPT_MASTER
    RENAME COLUMN DEPT_NR_NEW to DEPT_NR;
    
    ALTER TABLE DEPT_MASTER
    RENAME COLUMN DEPT_NAME to DEPT_N;

    (2)主キーがあり、制約が存在する場合でも、列の名前を変更できます。

    新しい列名を自動的にポイントし始めます

    SQL> CREATE TABLE "EMP"
    ( "EMPNO" NUMBER(4,0),
    "ENAME" VARCHAR2(10),
    "JOB" VARCHAR2(9),
    "MGR" NUMBER(4,0),
    "HIREDATE" DATE,
    "SAL" NUMBER(7,2) check(SAL > 1000),
    "COMM" NUMBER(7,2),
    "DEPTNO" NUMBER(2,0),
    CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
    );
    Table created.
    
    SQL> alter table emp rename column EMPNO to EMP_NO;
    Table altered.
    
    SQL> desc emp
    Name Null? Type
    ---  ----   ---
    EMP_NO NOT NULL NUMBER(4)
    ENAME VARCHAR2(10)
    JOB VARCHAR2(9)
    MGR NUMBER(4)
    HIREDATE DATE
    SAL NUMBER(7,2)
    COMM NUMBER(7,2)
    DEPTNO NUMBER(2)
    
    SQL> alter table emp rename column sal to salary;
    Table altered
    
    SQL> desc emp
    Name Null? Type
    --- -----  ----
    EMP_NO NOT NULL NUMBER(4)
    ENAME VARCHAR2(10)
    JOB VARCHAR2(9)
    MGR NUMBER(4)
    HIREDATE DATE
    SALARY NUMBER(7,2)
    COMM NUMBER(7,2)
    DEPTNO NUMBER(2)
    
    SQL> set long 2000
    SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;
    CREATE TABLE "SCOTT"."EMP"
    ( "EMP_NO" NUMBER(4,0),
    "ENAME" VARCHAR2(10),
    "JOB" VARCHAR2(9),
    "MGR" NUMBER(4,0),
    "HIREDATE" DATE,
    "SALARY" NUMBER(7,2),
    "COMM" NUMBER(7,2),
    "DEPTNO" NUMBER(2,0),
    CHECK ("SALARY">1000) ENABLE,
    CONSTRAINT "PK_EMP" PRIMARY KEY ("EMP_NO")
    USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
    TABLESPACE "TOOLS" ENABLE
    ) SEGMENT CREATION DEFERRED
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
    NOCOMPRESS LOGGING

    前の例からわかるように、チェック制約が新しい列名に変更され、主キーも新しい列に変更されます

    外部キー制約のある別の例も見てみましょう

    SQL> CREATE TABLE "DEPT"
    ( "DEPTNO" NUMBER(2,0),
    "DNAME" VARCHAR2(14),
    "LOC" VARCHAR2(13),
    CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO")
    ) 
    Table created.
    
    SQL> CREATE TABLE "EMP"
     ( "EMPNO" NUMBER(4,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
    );
    Table created.
    
    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');
    SQL> insert into emp values( 7698, 'Blake', 'MANAGER', 7839, to_date('1-5-2007','dd-mm-yyyy'), 2850, null, 10 );
    SQL> 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>
    
    SQL> commit;
    Commit complete.
    SQL> ALTER TABLE DEPT
    RENAME COLUMN DEPTNO to DEPTNO_NEW;
    Table altered.
    
    SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;
    
    CREATE TABLE "SCOTT"."EMP"
    ( "EMPNO" NUMBER(4,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 "SCOTT"."DEPT" ("DEPTNO_NEW") ENABLE
    ) SEGMENT CREATION IMMEDIATE
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
    BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "TOOLS"

    前の例からわかるように、外部キー制約は新しい列名を自動的に指し始めます。

    (3)プロシージャ、そのテーブルのビュー、および列がある場合は、列の名前を変更できます。

    ただし、名前を変更すると、これらのオブジェクトは無効になり、ビューとパッケージを変更してコンパイルする必要があります。これを例で見てみましょう

    SQL> CREATE TABLE DEPT_MASTER (
    dept_nr NUMBER UNIQUE,
    dept_name varchar2(100) NOT NULL,
    dept_status NUMBER(1,0) NOT NULL,
    created_at date
    );
    Table created.
    
    SQL> create view dept_vw as select dept_nr,dept_name from DEPT_MASTER;
    View created.
    
    SQL> ALTER TABLE DEPT_MASTER
    RENAME COLUMN DEPT_NR to DEPT_NR_NEW; 
    Table altered.
    
    SQL> select status from user_objects where object_name='DEPT_VW';
    STATUS
    ------
    INVALID
    
    SQL> alter view DEPT_VW compile;
    Warning: View altered with compilation errors.
    
    SQL> create or replace view dept_vw as select dept_nr_new,dept_name from DEPT_MASTER;
    View created.
    
    SQL> select status from user_objects where object_name='DEPT_VW';
    STATUS
    ------
    VALID

    Oracleのaltertablerename列に関するこの投稿が気に入っていただければ幸いです。フィードバックを提供してください

    また読む
    oracleのテーブルの変更:oracleのテーブルの変更は、列の変更、制約の削除と追加、テーブル列のデータ型の変更、テーブルストレージパラメータの変更に使用されます
    alter table add column oracle:便利ですテーブルを変更する方法への洞察は、列oracleを追加します。 oracle11gで導入された列の高速追加機能の詳細も提供されています。
    oracleはテーブルを作成します。テーブルは、Oracleデータベースのデータストレージの基本単位です。 Oraclecreatetableコマンドを使用して外部キー/プライマリキーを使用してテーブルを作成する方法について説明します
    oracleでaltertabledrop column:alter table drop column oracle、alter table set used column oracle、およびテーブルの変更未使用の列の削除
    オラクルのテーブルのすべての制約を確認する方法:Oracleデータベースのdba_constraintsおよびdba_cons_columnsデータディクショナリビューを使用してオラクルのテーブルのすべての制約を確認する方法
    オラクルの列データタイプを変更します。 oracle alter table modify the columnを使用してoracleに列をドロップする方法については、この投稿を確認してください。列の変更によりデフォルト値が変更される可能性があり、nullを許可しない
    https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables003.htm


    1. OracleSQLのCaseステートメントの一部でエイリアスを使用する

    2. SQLServerのデッドロックの構造とそれらを回避するための最良の方法

    3. Java for OS X 2013-004はSwingアプリケーションにどのように影響しますか?

    4. postgresで重複する配列値を排除する