| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Index and Indexed columns
There are various ways to do this. I have demonstrated a few ways
below.
scott_at_ORA92> -- sql only:
scott_at_ORA92> COLUMN columns_indexed FORMAT A15 WORD_WRAPPED
scott_at_ORA92> SELECT index_name,
2 MAX (SUBSTR (SYS_CONNECT_BY_PATH (column_name, ', '), 3))
3 AS columns_indexed
4 FROM (SELECT index_name, column_name,
5 ROW_NUMBER () OVER
6 (PARTITION BY index_name
7 ORDER BY column_position) AS curr,
8 ROW_NUMBER () OVER
9 (PARTITION BY index_name
10 ORDER BY column_position) - 1 AS prev
11 FROM user_ind_columns
12 WHERE table_name IN ('TEST_TAB', 'COMPANY'))
13 START WITH curr = 1
INDEX_NAME COLUMNS_INDEXEDscott_at_ORA92> SET SERVEROUTPUT ON
------------------------------ ---------------
COMPANY_KEYWORD_INDEX DUMMY INDX1 A, B INDX2 C, D, E INDX3 A scott_at_ORA92> -- anonymous pl/sql block scott_at_ORA92> -- (or you could put the same code in a procedure):
7 ('------------------------------ ---------------');
8 FOR r_ind IN
9 (SELECT index_name
10 FROM user_indexes
11 WHERE table_name IN ('TEST_TAB', 'COMPANY')
12 ORDER BY index_name)
13 LOOP
14 v_columns := NULL;
15 FOR r_col IN
16 (SELECT column_name
17 FROM user_ind_columns
18 WHERE index_name = r_ind.index_name
19 ORDER BY column_position)
20 LOOP
21 v_columns := v_columns || ', ' || r_col.column_name;
22 END LOOP;
23 v_columns := LTRIM (v_columns, ', ');
24 DBMS_OUTPUT.PUT_LINE
25 (RPAD (r_ind.index_name, 32) || v_columns);
26 END LOOP;
INDEX_NAME COLUMNS_INDEXED ------------------------------ --------------- COMPANY_KEYWORD_INDEX DUMMY INDX1 A, B INDX2 C, D, E INDX3 A
PL/SQL procedure successfully completed.
scott_at_ORA92> -- your own user-defined function specific to the
situation,
scott_at_ORA92> -- that "returns the columns as a varchar2 for a given
index"
scott_at_ORA92> -- as suggested by Gerald H. Pille:
scott_at_ORA92> CREATE OR REPLACE FUNCTION your_func
2 (p_index_name IN VARCHAR2,
3 p_delimiter IN VARCHAR2 DEFAULT ', ') 4 RETURN VARCHAR2 5 AS 6 v_columns VARCHAR2(32767);
9 (SELECT column_name 10 FROM user_ind_columns 11 WHERE index_name = p_index_name 12 ORDER BY column_position) 13 LOOP 14 v_columns := v_columns || p_delimiter || rec.column_name;15 END LOOP;
Function created.
scott_at_ORA92> SHOW ERRORS
No errors.
scott_at_ORA92> SELECT index_name,
2 your_func (index_name) AS columns_indexed
3 FROM user_indexes
4 WHERE table_name IN ('TEST_TAB', 'COMPANY')
5 ORDER BY index_name
6 /
INDEX_NAME COLUMNS_INDEXEDscott@ORA92> -- (search for stragg on http://asktom.oracle.com): scott_at_ORA92> SELECT index_name,
------------------------------ ---------------
COMPANY_KEYWORD_INDEX DUMMY INDX1 A, B INDX2 C, D, E INDX3 A scott_at_ORA92> -- Tom Kyte's stragg user-defined aggregate function
INDEX_NAME COLUMNS_INDEXED
------------------------------ ---------------
COMPANY_KEYWORD_INDEX DUMMY INDX1 A,B INDX2 C,D,E INDX3 A
scott_at_ORA92> Received on Fri Jun 10 2005 - 17:25:41 CDT
![]() |
![]() |