【问题标题】:How do I execute many Procedures inside one? [duplicate]如何在一个程序中执行多个程序? [复制]
【发布时间】:2018-07-27 07:41:10
【问题描述】:

我已经查过了,但找不到适合我的问题的解决方案。我有许多程序,它们将表从一个名为“源”的数据库模式复制到同一个名为“目标”的数据库上的另一个模式中。如果我单独执行程序,程序本身就可以工作。现在我只想用一个命令来执行它们。问题是我不知道怎么做。我想这样做是因为有很多程序,并且单独执行它们很烦人。如果有人可以帮助我,那就太好了。在此先感谢:)

我的方法(显然是错误的)是:

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;

【问题讨论】:

  • 删除 EXEC 命令。 EXEC 是一个 SQL*PLUS 命令,它基本上将您尝试执行的语句放在 BEGIN ... END 块中
  • 天哪,它奏效了……哈哈。好吧,我刚开始学习pl sql。谢谢你的回答xD
  • 调用多个过程的方式与调用一个过程的方式相同。

标签: oracle plsql exec procedures


【解决方案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;

【讨论】:

  • 我已经让它工作了,因为@Nick Krasnov 在我帖子下方的评论中回答了它。不过感谢您的贡献。
  • @AnSus 哇,干得好!
  • 为什么要退货?
  • 另外,ret := sqlErrM 会更容易
  • 问题是关于如何调用过程,所以我认为return 逻辑和异常隐藏器会分散答案的注意力。
猜你喜欢
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
相关资源
最近更新 更多