Oracleでカラムの存在チェック&追加


システムのバージョンアップで、必要なカラムが存在している環境と存在していない環境が混在している状況に直面しました。
バージョンアップの手順を1パターンにしたかったため、カラムが存在したら追加するスクリプトで対応しました。

対応方法

  • データベースはOracle
  • OracleのPL/SQL使用

1.スクリプトファイル

SET SERVEROUTPUT ON;
DECLARE
    V_COUNT NUMBER(2) := 0;
    V_OWNER VARCHAR(128);
    V_TBLNAME VARCHAR(128);
    V_COLUMN VARCHAR(128);
BEGIN
    ------------------------------------------------
    -- カラムの存在チェック
    ------------------------------------------------
    V_OWNER := 'TESTUSER';
    V_TBLNAME := 'TESTTABLE';
    V_COLUMN := 'TESTCOLUMN';
    select count(COLUMN_NAME) into V_COUNT from ALL_TAB_COLUMNS where owner = V_OWNER and Table_Name = V_TBLNAME and COLUMN_NAME = V_COLUMN;
    IF (V_COUNT = 0) THEN
    -- 存在していなかった場合追加
        DBMS_OUTPUT.PUT_LINE(V_OWNER || '.' || V_TBLNAME || '.' || V_COLUMN || 'カラムを追加します。');
        execute immediate 'ALTER TABLE TESTUSER.TESTTABLE ADD ( TESTCOLUMN VARCHAR2(XXX))';
    ELSE
        DBMS_OUTPUT.PUT_LINE(V_OWNER || '.' || V_TBLNAME || '.' || V_COLUMN || 'カラムはすでに存在します。');
    END IF;
END;
/
quit;

2.実行

$sqlplus user/pass @ xxx.sql