web-dev-qa-db-ja.com

Oracleでインデックスを確認する方法

Oracleデータベースに依存する製品のスキーマアップグレードスクリプトを作成しています。ある領域では、テーブルにインデックスを作成する必要があります-そのインデックスがまだ存在しない場合。 Oracleスクリプトで名前がわかっているインデックスの存在を確認する簡単な方法はありますか?

これはSQLServerでは次のようになります。IFNOTEXISTS(SELECT * FROM SYSINDEXES WHERE NAME = 'myIndex')//次にmyIndexを作成します

15
Doug

user_indexesからcount(*)を選択します。ここでindex_name = 'myIndex'

ただし、sqlplusはIF ...をサポートしないため、匿名のPL/SQLブロックを使用する必要があります。つまり、DDLを実行するには、EXECUTE IMMEDIATEを実行する必要があります。

DECLARE
    i INTEGER;
BEGIN
    SELECT COUNT(*) INTO i FROM user_indexes WHERE index_name = 'MYINDEX';
    IF i = 0 THEN
        EXECUTE IMMEDIATE 'CREATE INDEX myIndex ...';
    END IF;
END;
/

編集:指摘したように、Oracleは引用符で囲まれていないオブジェクト名をすべて大文字で格納します。

32
erikkallen