適當修改一下就行了,你會得到一個創建索引的sql文件SPOOL C:\CRE_IND.SQL SET SERVEROUTPUT ON SIZE 1000000DECLARE CURSOR C_IND IS SELECT * FROM USER_INDEXES; --所有的索引 V_COL VARCHAR2(4000); V_SQL VARCHAR2(4000); BEGIN FOR I IN C_IND LOOP V_COL := NULL; DECLARE CURSOR C_IND_COL IS SELECT * FROM USER_IND_COLUMNS --当前索引包含的列 WHERE INDEX_NAME=I.INDEX_NAME ORDER BY COLUMN_POSITION ; --字段顺序 BEGIN FOR J IN C_IND_COL LOOP V_COL := V_COL ||','||J.COLUMN_NAME||' '||J.DESCEND; --拼合列名及索引排序方式 END LOOP; V_COL := SUBSTR(V_COL,2); END; V_SQL := 'CREATE INDEX '||I.INDEX_NAME||' ON ' --拼合创建索引语句 ||I.TABLE_OWNER||'.'||I.TABLE_NAME||'('||V_COL||') TABLESPACE ' ||I.TABLESPACE_NAME||';'; DBMS_OUTPUT.PUT_LINE(V_SQL); --输出结果 END LOOP; END; /SPOOL OFF;
SET SERVEROUTPUT ON SIZE 1000000DECLARE
CURSOR C_IND IS SELECT * FROM USER_INDEXES; --所有的索引
V_COL VARCHAR2(4000);
V_SQL VARCHAR2(4000);
BEGIN
FOR I IN C_IND LOOP
V_COL := NULL;
DECLARE
CURSOR C_IND_COL IS
SELECT * FROM USER_IND_COLUMNS --当前索引包含的列
WHERE INDEX_NAME=I.INDEX_NAME
ORDER BY COLUMN_POSITION ; --字段顺序
BEGIN
FOR J IN C_IND_COL LOOP
V_COL := V_COL ||','||J.COLUMN_NAME||' '||J.DESCEND; --拼合列名及索引排序方式
END LOOP;
V_COL := SUBSTR(V_COL,2);
END;
V_SQL := 'CREATE INDEX '||I.INDEX_NAME||' ON ' --拼合创建索引语句
||I.TABLE_OWNER||'.'||I.TABLE_NAME||'('||V_COL||') TABLESPACE '
||I.TABLESPACE_NAME||';';
DBMS_OUTPUT.PUT_LINE(V_SQL); --输出结果
END LOOP;
END;
/SPOOL OFF;