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

Oracleでテーブルを変更する方法

    要件の変更とアップグレードに応じて、Oracleでテーブルを変更する必要があることがよくあります。ここに、Altertableステートメントに関するいくつかの重要なポイントがあります

    • ALTER TABLE を使用して、テーブルを変更または変更します ステートメント。
    • テーブルを変更するには、テーブルがスキーマに含まれている必要があります。または、テーブルに対するALTERオブジェクト権限またはALTERANYTABLEシステム権限のいずれかが必要です。
    • ビュー、マテリアライズドビュー、トリガー、関数ベースのインデックス、チェック制約、関数、パッケージの手順がベーステーブルに依存している場合、ベーステーブルまたはその列の変更は、依存オブジェクトに影響を与える可能性があります。たとえば、plsqlオブジェクトは次のようになります。依存テーブルオブジェクトが変更され、それらを再度有効にする必要がある場合は無効です

    物理的特性(INITRANSまたはストレージパラメータ)を変更する

    Alter tableステートメントを使用して、テーブルのストレージパラメータを変更できます。このようにinittransを変更できます

    ALTER TABLE TABLE_NAME INITRANS 10;

    テーブルを新しいセグメントまたはテーブルスペースに移動する

    必要に応じて、非パーティションテーブルまたはテーブルのパーティションを新しいセグメントまたは新しいテーブルスペースに移動できます

    Alter table table_name move tablespace <tablespace name>

    moveコマンドを使用して、altertableコマンドを使用して変更されていないテーブルのストレージパラメータを変更することもできます

    Oracleのテーブルを変更してデータ型を変更する

    altertablemodifyコマンドを使用して任意の列のデータ型を変更できます

    ALTER TABLE <table_name>
    MODIFY (<column_name>  <new_data_type>);
    Before
    SQL> desc emp
     Name                                      Null?    Type
     ----------------------------------------- -------- -----------------------
     EMPNO                                     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)
    
    
    After
    SQL> desc emp
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     EMPNO                                     NOT NULL NUMBER(4)
     ENAME                                              VARCHAR2(20)
     JOB                                                VARCHAR2(9)
     MGR                                                NUMBER(4)
     HIREDATE                                           DATE
     SAL                                                NUMBER(7,2)
     COMM                                               NUMBER(7,2)
     DEPTNO                                             NUMBER(2)
    

    Oracleの列データ型を変更する

    新しい列の追加/列の削除/列の名前の変更

    テーブル定義に新しい列を追加できます

    altertableaddコマンドを使用する

    ALTER TABLE <table_name>
    ADD (<New column_name>  <new_data_type>);

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

    Oracleでは、コマンドを使用してテーブルに列をドロップできます

    テーブルの変更ドロップ列;
    これらの詳細については、以下の記事を確認してください

    alter table add column oracle

    未使用の列を設定し、未使用の列を削除する

    列を削除する際に消費されるリソースが心配な場合は、ALTERTABLE…SETUNUSEDステートメントを使用できます。

    このステートメントは、1つ以上の列を未使用としてマークしますが、実際にはターゲット列データを削除したり、これらの列が占めるディスク領域を復元したりすることはありません。

    • 未使用としてマークされた列はクエリまたはデータディクショナリビューに表示されず、新しい列がその名前を再利用できるようにその名前が削除されます。列に定義されているすべての制約、インデックス、および統計も削除されます。
    Example
    ALTER TABLE <table_name>
    SET UNUSED COLUMN <column_name>;

    後でコマンドを使用してリソースが少なくなったときに、未使用の列を削除できます

    ALTER TABLE <table_name>
    Drop  UNUSED COLUMN ;

    テーブルに関連付けられた整合性制約を追加、変更、または削除するか、制約を有効/無効にすることもできます

    制約の追加は、テーブルの追加の制約を使用して行われます

    ALTER TABLE EMP ADD CONSTRAINT EMP_FK FOREIGN KEY (DEPT_NO) REFERENCES 
    DEPT(DEPT_NO);

    制約の削除–

    を使用して実行されます
    ALTER TABLE DROP CONSTRAINT <constraint_name> command;

    制約の有効化/無効化–制約は、DISABLE / ENABLEモードで作成するか、コマンドを使用して無効化または有効化できます

    ALTER TABLE ENABLE/DISABLE CONSTRAINT <constraint_name>

    テーブル名の名前を変更

    Oracleでは、テーブル名の名前も変更できます

    Rename <table name>  to <new table name>;

    テーブルキャッシュ/キャッシュなしの変更、圧縮、並列処理

    Oracleは許可します テーブルキャッシュ/キャッシュなしの変更、圧縮、並列処理

    関連記事

    Oracleのすべてのテーブルを一覧表示する
    テーブルを作成するoracle
    ora-20005:オブジェクトの統計がロックされている
    テーブルの移動を変更する
    oracleのテーブルのすべての制約を確認する方法
    https ://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_3001.htm


    1. CloudSQLからAWSRDSへのMySQLデータベースの移行

    2. SQL Server(T-SQL)の各パーティションの行数を返す3つの方法

    3. 高可用性のためにPostgreSQLを使用してTeamcityをデプロイする方法

    4. OracleSQLDeveloperでのExplainPlanの実行の結果を理解する