2016-12-06 5 views
0

У меня естьКак создать индекс внутри процедуры

CREATE PROCEDURE PROD_SEL 
(
    A_N IN NUMBER, 
    AA_N OUT NUMBER 
) AS 
BEGIN 
    CREATE INDEX NUM_TABLE ON EMP(EMP_NUM); 
END PROD_SEL 

У меня есть этот код. Как создать индекс внутри процедуры правильно?

+0

Зачем вам нужно это делать в процедуре? Обычно индексы только один раз создаются администратором базы данных. Если индекс уже существует, вы получите сообщение об ошибке. – Barmar

+0

У вас не должно быть 'PROD_SEL' после' END'. – Barmar

+0

@Barmar требуется по инструкции моего задания. Я создаю индекс отдельно, и он работает. Нет, я удаляю его для включения внутри моей процедуры, и он не работает – aok

ответ

0

CREATE является DDL (язык определения данных), и вы не можете иметь внутри друг друга.

Как правило, если вы хотите это сделать, вы должны выполнить 'CREATE INDEX...' так же, как вы бы выполнили любые динамические SQL.

Если индекс предназначен для временного использования и удаления после процесса, вы часто видите CREATE, затем EXEC процедуры, а затем DROP указатель.

Я был бы здесь осторожнее с планом выполнения процедуры, не осведомленной об индексе вообще.

+0

Я не вижу этого в [Ограничения на сохраненные программы] (https://dev.mysql.com/doc/mysql-reslimits-excerpt/5.1/en/stored-program-restrictions.html) – Barmar

+0

@Barmar It не имеет ничего общего с хранимыми процедурами как таковыми. CREATE должен быть первым заявлением в пакете. –

+0

Я предполагаю, что этот ответ (как и вопрос) для SQL Server, а не MySQL? Оба тега на вопрос, и я думаю, что я просто прочитал все, полагая, что mysql и сгладить мою голову довольно сложно. Может быть, @ Бармар тоже? –