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

时间:2018-02-22 07:59:58

标签: oracle cursor

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

现在我无法在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)时遇到错误;

1 个答案:

答案 0 :(得分:3)

只需删除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; 即可。但请注意,你的循环永远不会退出,因为L_TOTAL永远不会小于零 - 你应该修复它。

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

{{1}}

相当简单,不是吗?