Хранимая процедура Oracle для удаления нескольких индексов с входными и выходными параметрами - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно разработать 2 хранимые процедуры Oracle, одну для удаления индекса, а другую для создания индексов, чтобы я мог вызывать их из своего приложения.

Я пробовал что-то подобное - но мои приложенияговорит, что не имеет выходных параметров, а также имеет ошибку при параллельной опции

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

1 Ответ

0 голосов
/ 12 июня 2018

Если я правильно понял вопрос, вы хотите удалить и создать индекс, а затем вернуть логическое значение true, если операции с индексами выполнены успешно, или false, если они не пройдены.Естественной конструкцией здесь является ФУНКЦИЯ:

CREATE OR REPLACE FUNCTION CLEAR_INDEX
   (   INDEX_NAME1 IN VARCHAR2,
       INDEX_NAME2 IN VARCHAR2 )
   RETURN BOOLEAN AS
BEGIN
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME1;
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME2;
    RETURN ( TRUE ):
EXCEPTION
    WHEN OTHERS THEN
        RETURN ( FALSE );
END CLEAR_INDEX;

Если вы настаиваете на ПРОЦЕДУРЕ:

CREATE OR REPLACE PROCEDURE CLEAR_INDEX
   (   INDEX_NAME1 IN VARCHAR2,
       INDEX_NAME2 IN VARCHAR2,
       IT_WORKED   OUT BOOLEAN )
BEGIN
    IT_WORKED := FALSE;
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME1;
    EXECUTE IMMEDIATE 'drop index ' || INDEX_NAME2;
    IT_WORKED := TRUE;
EXCEPTION
    WHEN OTHERS THEN
       IT_WORKED := FALSE;
END CLEAR_INDEX;

Обратите внимание, как была удалена опция parallel, потому что нет такой вещи, как параллельпонижаться.Отбрасывание объектов обычно происходит сразу, нет смысла распараллеливать операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...