如何在Oracle中使用游标在存储过程中执行存储过程

How to execute Stored Procedure inside Stored Procedure with Cursor in Oracle

我是 Oracle 的新手, 在 SQL 服务器中,我可以轻松地在存储过程中执行存储过程 甚至使用光标。

现在我无法在 Oracle 中解决这个问题,下面是我的代码。

CREATE OR REPLACE PROCEDURE ZSP_INSMASTERDATASTM
AS
   l_total        INTEGER := 10000;

   CURSOR c1
   IS
      SELECT DISTINCT PRODFROMTO FROM DJ_P9945LINKS;

   l_PRODFROMTO   c1%ROWTYPE;
BEGIN
   OPEN c1;

   LOOP
      FETCH c1 INTO l_PRODFROMTO;

      EXIT WHEN c1%NOTFOUND;

      EXECUTE ZSP_GETMASTERDATASTM (l_PRODFROMTO);

      EXIT WHEN l_total <= 0;
   END LOOP;

   CLOSE c1;
END ZSP_INSMASTERDATASTM;

我在执行时出错 ZSP_GETMASTERDATASTM (l_PRODFROMTO);

只需删除 EXECUTE。但是,请注意您的循环将永远不会退出,因为 L_TOTAL 永远不会小于零 - 您应该解决这个问题。

否则,请考虑使用游标 FOR 循环,因为它更易于维护 - 您不必声明游标变量、打开游标、提取、退出循环、关闭游标。看看这个例子:

CREATE OR REPLACE PROCEDURE zsp_insmasterdatastm
AS
BEGIN
   FOR cur_r IN (SELECT DISTINCT prodfromto FROM dj_p9945links)
   LOOP
      zsp_getmasterdatastm (cur_r.prodfromto);
   END LOOP;
END;

很简单,不是吗?