18

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

SQL Server では次のようになります。 IF NOT EXISTS (SELECT * FROM SYSINDEXES WHERE NAME = 'myIndex') // Then create mymyIndex

4

1 に答える 1

37

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

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

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 は引用符で囲まれていないオブジェクト名をすべて大文字で格納します。

于 2009-03-12T20:48:49.080 に答える