我是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)时遇到错误;
答案 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}}
相当简单,不是吗?