2009-03-12 7 views
14

Oracle 데이터베이스에 의존하는 제품에 대한 스키마 업그레이드 스크립트를 작성하고 있습니다. 한 영역에서 테이블에 인덱스를 만들 필요가 있습니다 (인덱스가없는 경우). Oracle 스크립트에서 이름을 알고있는 인덱스의 존재를 확인하는 쉬운 방법이 있습니까?Oracle에서 색인을 확인하는 방법

그것은 SQL 서버에서이 유사 할 것입니다 : NOT이있는 경우 은 (SELECT * NAME = 'myIndex'WHERE SYSINDEXES FROM) 그런 다음 내 myIndex 인덱스 _ USER_INDEXES에서

답변

30

SELECT COUNT (*)를 만들 // = 'myIndex'

sqlplus는 IF ...를 지원하지 않으므로 익명의 PL/SQL 블록 (DDL을 수행하려면 EXECUTE IMMEDIATE)을 사용해야합니다.

DECLARE 
    i INTEGER; 
BEGIN 
    SELECT COUNT(*) INTO i FROM user_indexes WHERE index_name = 'MYINDEX'; 
    IF i = 0 THEN 
     EXECUTE IMMEDIATE 'CREATE INDEX myIndex ...'; 
    END IF; 
END; 
/

편집 : 오라클은 따옴표로 묶지 않은 객체 이름을 모두 대문자로 저장합니다.

+1

따옴표를 사용하지 않으면 데이터베이스 개체 (인덱스 포함)가 대문자로 저장됩니다. 따라서 CREATE INDEX myIndex를 수행하면 USER_INDEXES에서 MYINDEX로 저장됩니다. 오라클 (기본적으로)은 대소 문자를 구분하지 않습니다. –

+1

이 대답뿐입니다. 다른 스키마에 인덱스가 있는지 확인해야하는 경우 USER_INDEXES 대신 ALL_INDEXES를 쿼리하십시오. USER_INDEXES를 검사하는 것이 "ALTER SESSION SET CURRENT_SCHEMA = XYZ"와 함께 작동하지 않으면 여전히 현재 로그인 한 사용자의 색인을 조회합니다. – SaschaM78

관련 문제