Как выполнить много процедур внутри одной?

Я уже просмотрел его, но не смог найти правильного решения для своего вопроса. У меня есть много процедур, которые копируют таблицы из одной схемы базы данных, называемой «источник», в другую схему той же базы данных, называемой «целевой». Сами Процедуры работают, если я выполняю их по отдельности. Теперь я хочу выполнить их только одной командой. Проблема в том, что я не знаю как. Я хочу сделать это, потому что процедур много, и выполнять их все по отдельности неудобно. Было бы неплохо, если бы кто-нибудь мог мне помочь. Заранее спасибо :)

Мой подход (который явно неверен):

CREATE OR REPLACE PROCEDURE COPY_TABLES
IS
BEGIN
EXEC COPY_EAKTEPERSON;
EXEC COPY_EANDEREANSRPUECHE;
EXEC COPY_EANDEREBHBERECHT;
EXEC COPY_EBEIHILFEBEMSATZ;
EXEC COPY_EBESCHAEFTIGUNG;
EXEC COPY_EDIENSTSTELLE;
EXEC COPY_EEIGENBEHALT;
EXEC COPY_EPFLEGEVERS;
EXEC COPY_ESEHSCHAERFE;
EXEC COPY_EVERSLEISTUNG;
EXEC COPY_EWOHNISITZ;
EXEC COPY_EPERSON;
END;

person AnSuS    schedule 27.07.2018    source источник
comment
Удалите команду EXEC. EXEC — это команда SQL*PLUS, которая в основном помещает оператор, который вы пытаетесь выполнить, в блок BEGIN ... END.   -  person Nick Krasnov    schedule 27.07.2018
comment
о боже, это сработало ... LOL. Ну, я только начал изучать pl sql. Спасибо за ответ хД   -  person AnSuS    schedule 27.07.2018
comment
Многие процедуры вызываются так же, как и одна процедура.   -  person William Robertson    schedule 27.07.2018


Ответы (1)


Процедура, вызывающая другую процедуру.

create or replace procedure COPY_TABLES(                                         
ret out varchar2) as
   error      varchar2(1000);
begin
   COPY_EAKTEPERSON();
   COPY_EANDEREANSRPUECHE();
   COPY_EANDEREBHBERECHT();
   COPY_EBEIHILFEBEMSATZ();
   COPY_EBESCHAEFTIGUNG();
   COPY_EDIENSTSTELLE();
   COPY_EEIGENBEHALT();
   COPY_EPFLEGEVERS();
   COPY_ESEHSCHAERFE();
   COPY_EVERSLEISTUNG();
   COPY_EWOHNISITZ();
   COPY_EPERSON();
   ret := ''
   return;
exception
   when others then
   error_info := sqlerrm;
   ret := error_info;
end COPY_TABLES;
person M.Laida    schedule 27.07.2018
comment
Я уже заставил его работать, потому что @Nick Krasnov ответил на него в комментарии под моим постом. Спасибо за вклад, хотя. - person AnSuS; 27.07.2018
comment
@AnSus Вау, отличная работа! - person M.Laida; 27.07.2018
comment
почему возврат? - person Aleksej; 27.07.2018
comment
также ret := sqlErrM было бы проще - person Aleksej; 27.07.2018
comment
@Aleksej: просто проверьте, не возвращают ли процедуры какие-либо необработанные ошибки, и да, действительно, это было бы намного проще. Спасибо =) - person M.Laida; 27.07.2018
comment
Вопрос был о том, как вызвать процедуру, поэтому я думаю, что логика return и скрытие исключений отвлекают от ответа. - person William Robertson; 27.07.2018