Oracle中實(shí)現(xiàn)MySQL show index from table命令SQL腳本分享
實(shí)驗(yàn)數(shù)據(jù)初始化:
create table t as select * from hr.employees;
create index inx_t1 on t(employee_id,first_name desc,last_name);
create index inx_t2 on t(job_id,hire_date);
顯示該表所有索引的信息。
以dba登錄
set linesize 300;
set pagesize 100;
col c1 format a20;
col c2 format a20;
col c3 format a20;
col c4 format a20;
col c5 format a20;
col INDEX_NAME format a20;
select INDEX_NAME,
max(decode(COLUMN_POSITION,1,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c1,
max(decode(COLUMN_POSITION,2,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c2,
max(decode(COLUMN_POSITION,3,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c3,
max(decode(COLUMN_POSITION,4,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c4,
max(decode(COLUMN_POSITION,5,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c5
from (
select INDEX_NAME,COLUMN_NAME,COLUMN_LENGTH,COLUMN_POSITION,DESCEND
from dba_ind_columns
where table_owner='LIHUILIN'
AND table_name='T'
order by INDEX_NAME,column_position
) group by INDEX_NAME;
以普通用戶登錄
set linesize 300;
set pagesize 100;
col c1 format a20;
col c2 format a20;
col c3 format a20;
col c4 format a20;
col c5 format a20;
col INDEX_NAME format a20;
select INDEX_NAME,
max(decode(COLUMN_POSITION,1,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c1,
max(decode(COLUMN_POSITION,2,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c2,
max(decode(COLUMN_POSITION,3,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c3,
max(decode(COLUMN_POSITION,4,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c4,
max(decode(COLUMN_POSITION,5,COLUMN_NAME||','||COLUMN_LENGTH||','||DESCEND,null)) c5
from (
select INDEX_NAME,COLUMN_NAME,COLUMN_LENGTH,COLUMN_POSITION,DESCEND
from user_ind_columns
where table_name='T'
order by INDEX_NAME,column_position
) group by INDEX_NAME;
但是可以看到,以倒序創(chuàng)建的索引字段,都是以SYS等命名。
Oracle把這種倒序創(chuàng)建的索引字段看成函數(shù)索引。
它的信息保存在user_ind_expressions視圖。
user_ind_expressions視圖的COLUMN_EXPRESSION字段類型是long型。
王工的版本可以解決這個(gè)問(wèn)題
CREATE OR REPLACE FUNCTION long_2_varchar (
p_index_name IN user_ind_expressions.index_name%TYPE,
p_table_name IN user_ind_expressions.table_name%TYPE,
p_COLUMN_POSITION IN user_ind_expressions.table_name%TYPE)
RETURN VARCHAR2
AS
l_COLUMN_EXPRESSION LONG;
BEGIN
SELECT COLUMN_EXPRESSION
INTO l_COLUMN_EXPRESSION
FROM user_ind_expressions
WHERE index_name = p_index_name
AND table_name = p_table_name
AND COLUMN_POSITION = p_COLUMN_POSITION;
RETURN SUBSTR (l_COLUMN_EXPRESSION, 1, 4000);
END;
/
set linesize 300;
set pagesize 100;
col c1 format a20;
col c2 format a20;
col c3 format a20;
col c4 format a20;
col c5 format a20;
col INDEX_NAME format a20;
SELECT INDEX_NAME,
MAX (DECODE (COLUMN_POSITION, 1, COLUMN_NAME || ' ' || DESCEND, NULL))
c1,
MAX (DECODE (COLUMN_POSITION, 2, COLUMN_NAME || ' ' || DESCEND, NULL))
c2,
MAX (DECODE (COLUMN_POSITION, 3, COLUMN_NAME || ' ' || DESCEND, NULL))
c3,
MAX (DECODE (COLUMN_POSITION, 4, COLUMN_NAME || ' ' || DESCEND, NULL))
c4,
MAX (DECODE (COLUMN_POSITION, 5, COLUMN_NAME || ' ' || DESCEND, NULL))
c5
FROM ( SELECT a.INDEX_NAME,
REPLACE (
DECODE (
descend,
'DESC', long_2_varchar (b.index_name,
b.table_NAME,
b.COLUMN_POSITION),
a.column_name),
'"',
'')
COLUMN_NAME,
a.COLUMN_LENGTH,
a.COLUMN_POSITION,
DESCEND
FROM user_ind_columns a
LEFT JOIN
user_ind_expressions b
ON a.index_name = b.index_name
AND a.table_name = b.table_name
WHERE a.table_name = 'T'
ORDER BY INDEX_NAME, column_position)
GROUP BY INDEX_NAME;
- MySQL中SHOW TABLE STATUS的使用及說(shuō)明
- MySQL使用show?effective?grants查看權(quán)限官方解讀
- MySQL通過(guò)show status查看、explain分析優(yōu)化數(shù)據(jù)庫(kù)性能
- MySQL通過(guò)show processlist命令檢視性能的講解
- MySQL中使用SHOW PROFILE命令分析性能的用法整理
- mysql show processlist 顯示mysql查詢進(jìn)程
- MySQL中show命令方法得到表列及整個(gè)庫(kù)的詳細(xì)信息(精品珍藏)
- MySQL中的SHOW FULL PROCESSLIST命令實(shí)現(xiàn)
相關(guān)文章
Oracle用decode函數(shù)或CASE-WHEN實(shí)現(xiàn)自定義排序
這篇文章主要介紹了Oracle用decode函數(shù)或CASE-WHEN實(shí)現(xiàn)自定義排序功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05給Oracle添加split和splitstr函數(shù)的方法
最近項(xiàng)目中有很多需要做批量操作的需求,客戶端把一組逗號(hào)分隔的ID字符串傳給數(shù)據(jù)庫(kù),存儲(chǔ)過(guò)程就需要把它們分割,然后逐個(gè)處理2012-11-11sqlplus 命令登錄 Oracle數(shù)據(jù)庫(kù)的多種方法
這篇文章主要介紹了sqlplus 命令登錄 Oracle數(shù)據(jù)庫(kù)的兩種方法,方式一通過(guò)sql*plus 命令窗口,方式2:通過(guò) cmd 窗口,每種方式給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09Oracle 12C實(shí)現(xiàn)跨網(wǎng)絡(luò)傳輸數(shù)據(jù)庫(kù)詳解
這篇文章主要給大家介紹了關(guān)于Oracle 12C實(shí)現(xiàn)跨網(wǎng)絡(luò)傳輸數(shù)據(jù)庫(kù)的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06使用springboot暴露oracle數(shù)據(jù)接口的問(wèn)題
這篇文章主要介紹了使用springboot暴露oracle數(shù)據(jù)接口的問(wèn)題,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05Hibernate Oracle sequence的使用技巧
本文介紹了關(guān)于Hibernate中如何使用Oracle sequence的問(wèn)題以及應(yīng)注意的事項(xiàng)。2009-06-06Oracle的substr和instr函數(shù)簡(jiǎn)單用法
這篇文章主要介紹了Oracle的substr和instr函數(shù)簡(jiǎn)單用法 的相關(guān)資料,需要的朋友可以參考下2015-12-12將oracle的create語(yǔ)句更改為alter語(yǔ)句使用
本文將詳細(xì)介紹oracle的create語(yǔ)句更改為alter語(yǔ)句使,需要了解更多的朋友可以參考下2012-11-11ORACLE數(shù)據(jù)庫(kù)應(yīng)用開發(fā)常見問(wèn)題及排除
ORACLE數(shù)據(jù)庫(kù)應(yīng)用開發(fā)常見問(wèn)題及排除...2007-03-03