Как исправить «ORA-00950: недопустимая опция DROP»?

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;
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
68
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам не хватает пробела после 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;
/

Другие вопросы по теме