index examples ejemplo drop create oracle indexing

examples - select index oracle



índice de caída de oráculo si existe (5)

En Oracle, no puede mezclar DDL y DML. Para hacerlo, debe trabajar con la instrucción EXECUTE INMEDIATO .

Entonces, primero verifique la existencia del índice.

Segundo, suelte el índice a través de la declaración EJECUTAR INMEDIATO.

DECLARE v_Exists NUMBER; BEGIN v_Exists := 0; SELECT 1 INTO v_Exists FROM USER_INDEXES WHERE TABLE_NAME LIKE ''myTable'' AND INDEX_NAME LIKE ''myIndexName'' IF v_Exists = 1 THEN EXECUTE IMMEDIATE "DROP INDEX myIndexName" ENDIF; EXCEPTION WHEN OTHERS THEN NULL; END;

Este código está fuera de mi cabeza y es posible que tengas que arreglarlo un poco, pero esto da una idea.

¡Espero que esto ayude! =)

¿Cómo se puede soltar un índice solo si existe?

Parece simple, pero encontré algo en la red. La idea es soltarlo solo si existe, porque si no, tendré un error y mi proceso se detendrá.

Encontré esto para encontrar si el índice existe:

select index_name from user_indexes where table_name = ''myTable'' and index_name=''myIndexName''

Pero no sé cómo armarlo con

DROP INDEX myIndexName


Espero que esto sea de ayuda. Es una combinación de todas las soluciones :) Por cierto, ¡gracias por la ayuda!

CREATE OR REPLACE PROCEDURE CLEAR_INDEX(INDEX_NAME IN VARCHAR2) AS BEGIN EXECUTE IMMEDIATE ''drop index '' || INDEX_NAME; EXCEPTION WHEN OTHERS THEN NULL; END CLEAR_INDEX;


Hice un procedimiento para que pueda ser llamado varias veces:

DELIMITER €€ DROP PROCEDURE IF EXISTS ClearIndex€€ CREATE PROCEDURE ClearIndex(IN var_index VARCHAR(255),IN var_table VARCHAR(255)) BEGIN SET @temp = concat(''DROP INDEX '', var_index, '' ON '', var_table); PREPARE stm1 FROM @temp; BEGIN DECLARE CONTINUE HANDLER FOR 1091 SELECT concat(''Index '', var_index,'' did not exist in '',var_table,'', but was handled'') AS ''INFO''; EXECUTE stm1; END; END €€ DELIMITER ;

Ahora se puede llamar más de una vez:

CALL ClearIndex(''employees_no_index'',''employees''); CALL ClearIndex(''salaries_no_index'',''salaries''); CALL ClearIndex(''titles_no_index'',''titles'');


No verifique la existencia. Intenta soltar y capturar la excepción si es necesario ...

declare index_not_exists EXCEPTION; PRAGMA EXCEPTION_INIT(index_not_exists, -1418); begin execute immediate ''drop index foo''; exception when index_not_exists then null; end; /


DECLARE COUNT_INDEXES INTEGER; BEGIN SELECT COUNT(*) INTO COUNT_INDEXES FROM USER_INDEXES WHERE INDEX_NAME = ''myIndexName''; IF COUNT_INDEXES > 0 THEN EXECUTE IMMEDIATE ''DROP INDEX myIndexName''; END IF; END; /