46 lines
1.5 KiB
SQL
46 lines
1.5 KiB
SQL
CREATE OR REPLACE VIEW obj_indexes_missing AS
|
|
WITH x AS (
|
|
SELECT /*+ MATERIALIZE */
|
|
app.get_item('$TABLE_NAME') AS table_name
|
|
FROM DUAL
|
|
),
|
|
f AS (
|
|
SELECT
|
|
t.table_name,
|
|
t.constraint_name AS index_name,
|
|
LISTAGG(t.column_name, ', ') WITHIN GROUP (ORDER BY t.position) AS cols
|
|
FROM user_cons_columns t
|
|
JOIN user_constraints n
|
|
ON n.constraint_name = t.constraint_name
|
|
JOIN x
|
|
ON n.table_name = NVL(x.table_name, n.table_name)
|
|
WHERE n.constraint_type = 'R'
|
|
AND n.table_name NOT IN (SELECT object_name FROM RECYCLEBIN)
|
|
GROUP BY t.table_name, t.constraint_name
|
|
)
|
|
SELECT
|
|
app.get_icon('fa-plus-square') AS action,
|
|
app.get_page_url(951,
|
|
in_names => 'P951_TABLE_NAME,P951_INDEX_NAME,P951_INDEX_ADD',
|
|
in_values => f.table_name || ',' || f.index_name || ',Y'
|
|
) AS action_url,
|
|
--
|
|
f.table_name,
|
|
f.index_name,
|
|
f.cols,
|
|
--
|
|
'CREATE INDEX ' || RPAD(f.index_name, 30) ||
|
|
' ON ' || RPAD(f.table_name, 30) || ' (' || f.cols || ') COMPUTE STATISTICS;' AS fix
|
|
FROM f
|
|
LEFT JOIN (
|
|
SELECT i.table_name, i.index_name, LISTAGG(i.column_name, ', ') WITHIN GROUP (ORDER BY i.column_position) AS cols
|
|
FROM user_ind_columns i
|
|
JOIN x
|
|
ON i.table_name = NVL(x.table_name, i.table_name)
|
|
GROUP BY i.table_name, i.index_name
|
|
) i
|
|
ON i.table_name = f.table_name
|
|
AND i.cols LIKE f.cols || '%'
|
|
WHERE i.index_name IS NULL;
|
|
|