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
![]() |
![]() |