現在、ALL_IND_COLUMNSを使用して、インデックスがその名前または使用している列で存在するかどうかを確認しています。問題は、特定の順序で列を持つインデックスが存在するかどうかしか確認できないことです。
テーブルに任意の名前のインデックスがあるかどうかを確認する必要がありますが、Column1、Column2、およびColumn3は任意の順序です。どうすればこれを行うことができますか?
複数の列を使用するインデックスが存在するかどうかを確認できます。
WITH
index_cols AS (
SELECT
table_name,
index_name,
COLLECT(column_name) AS column_names
FROM all_ind_columns
WHERE table_name = '&table_name'
GROUP BY
table_name,
index_name
),
target_cols AS (
SELECT '&column_name_1' AS col_name FROM dual
UNION SELECT '&column_name_2' FROM dual
)
SELECT
ic.*
FROM index_cols ic
WHERE
(
SELECT COUNT(*)
FROM target_cols tc
JOIN TABLE(ic.column_names) icc
ON (tc.col_name = icc.COLUMN_VALUE)
) = (
SELECT COUNT(*)
FROM target_cols
)
;
それを行う(少し複雑な)方法の1つです。
しかし、コメントで aasim.abdullahが注記 のように、同じ列のセットにあるが順序が異なる2つのインデックスは同じではありません。また、両方のインデックスを並べて使用することもできます。