Первое сообщение об ошибке говорит вам, что чего-то не хватает до BEGIN
, и даже упоминает две возможные опции в списке «при ожидании».Вам нужно изменить его на:
PROCEDURE TEST_TABLE IS
-- ^^
Или вы можете использовать AS
вместо IS
, если предпочитаете ...
Вторая ошибка заключается в том, что у вас есть строковый литералвстроенный в ваш динамический SQL, и вы не избежали одинарных кавычек, хотя у вас есть где-то еще:
...
dbms_output.put_line(''drop partition completed'');
-- ^ ^
END;';
Вместо этого вы можете использовать альтернативный механизм *1013*.
Я не уверен, почему вы делаете два уровня динамического SQL;Вы можете сделать dbms_output()
и оценить cc.high_value
статически, и решить, делать ли alter call
, только с этой частью, динамической (как показало @ BarbarosÖzhan, поэтому я не буду повторять это!).Или выполните проверку высокого значения в запросе курсора.
Я все еще получаю исключение Ошибка (1,14): PLS-00304: не удается скомпилировать тело 'TEST_TABLE' без его спецификации
Если вы хотите пакет, то вы должны создать его спецификацию, прежде чем пытаться создать его тело:
CREATE OR REPLACE PACKAGE TEST_TABLE AS
PROCEDURE TEST_TABLE;
END TEST_TABLE;
/
CREATE OR REPLACE PACKAGE BODY TEST_TABLE AS
PROCEDURE TEST_TABLE IS
BEGIN
FOR cc IN
...
LOOP
...
END LOOP;
END TEST_TABLE; -- end of procedure
END TEST_TABLE; -- end of package
/
Если имя пакета совпадает с процедурой внутри него, это немного страннои сбивает с толку.
Но, может быть, вы на самом деле вообще не хотели пакет и пытались создать отдельную процедуру, в этом случае просто удалите часть тела пакета:
CREATE OR REPLACE PROCEDURE TEST_TABLE AS
BEGIN
FOR cc IN
...
LOOP
...
END LOOP;
END TEST_TABLE; -- end of procedure
/
Подробнее .
Я бы настоятельно рекомендовал вам избавиться от обработчика исключений, и я упустил это из этих контуров - вы должны позволить любому исключению перетекать обратно к вызывающей стороне.Вы не знаете, что кто бы ни звонил, у него даже будет включен вывод, поэтому он может даже не увидеть сообщение, которое вы печатаете.Только когда-либо ловить исключения, которые вы можете обработать и должны обрабатывать в этот момент.