ORA-00950: invalid DROP option
Выше приведена ошибка, которую я получаю. Я написал эту процедуру для удаления всех индексов из таблицы emp_1. Так может ли кто-нибудь помочь мне узнать ошибку и исправить эту ошибку?
CREATE OR REPLACE NONEDITIONABLE PROCEDURE sp_drop_indexes (
p_table_name IN VARCHAR2,
p_errormsg OUT VARCHAR2 )
IS
v_sql VARCHAR2(1000);
CURSOR get_indexes IS
SELECT index_name
FROM user_indexes
WHERE table_name = 'EMP_1';
BEGIN
FOR rec IN get_indexes LOOP
v_sql := 'DROP INDEX' || rec.index_name;
EXECUTE IMMEDIATE v_sql;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
p_errormsg := sqlerrm;
END sp_drop_indexes;
Вам не хватает пробела после DROP INDEX
(но все еще внутри кавычек) в вашем коде:
v_sql := 'DROP INDEX ' || rec.index_name;
Не забудьте поставить пробел после ключевого слова DROP INDEX
:
v_sql := 'DROP INDEX ' || rec.index_name;
Вам нужен пробел после отбрасываемого индекса, и, если у вас могут быть имена индексов с учетом регистра, вам нужны двойные кавычки:
CREATE OR REPLACE NONEDITIONABLE PROCEDURE sp_drop_indexes (
p_table_name IN VARCHAR2,
p_errormsg OUT VARCHAR2 )
IS
v_sql VARCHAR2(1000);
CURSOR get_indexes IS
SELECT index_name
FROM user_indexes
WHERE table_name = 'EMP_1';
BEGIN
FOR rec IN get_indexes LOOP
v_sql := 'DROP INDEX "' || rec.index_name || '"';
EXECUTE IMMEDIATE v_sql;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
p_errormsg := sqlerrm;
END sp_drop_indexes;
/