Bạn có thể truy vấn DBA_/ALL_/USER_IND_COLUMNS
, ví dụ:
SQL> SELECT index_name
2 FROM dba_ind_columns
3 WHERE table_owner = 'SCOTT'
4 AND table_name = 'EMP'
5 AND column_name = 'EMPNO';
INDEX_NAME
------------------------------
PK_EMP
Tất nhiên, bạn có thể muốn mở rộng truy vấn một chút. Điều này sẽ nhận bất kỳ chỉ mục nào mà cột EMPNO xuất hiện. Bạn có thể muốn giới hạn mình vào các chỉ mục trong đó cột là cột hàng đầu của chỉ mục (COLUMN_POSITION
= 1). Hoặc bạn có thể muốn giới hạn bản thân chỉ mục trên cột cụ thể đó (để không có cột nào trong COLUMN_POSITION
2), tức là
SQL> ed
Wrote file afiedt.buf
1 SELECT index_name
2 FROM dba_ind_columns a
3 WHERE table_owner = 'SCOTT'
4 AND table_name = 'EMP'
5 AND column_name = 'EMPNO'
6 AND column_position = 1
7 AND NOT EXISTS(SELECT 1
8 FROM dba_ind_columns b
9 WHERE a.index_owner = b.index_owner
10 AND a.index_name = b.index_name
11* AND b.column_position = 2)
SQL>/
INDEX_NAME
------------------------------
PK_EMP
Nguồn
2008-11-20 21:24:12