cabbage_rose 发表于 2008-02-04 18:11

关于存储过程调用的问题

foreach select branch into Vbranch from jigou
      callmyproc(Vbranch) returning n;
end foreach
上面的语句执行后,myproc仅把foreach 搜寻出的第一个值作为参数执行了一次后退出了,branch应该有很多值得,但是都不能执行到。
是不是foreach中不能循环执行存储过程呀?

cloudflashes 发表于 2008-02-04 18:11

可以在存储过程中再调存储过程的。请加 with hold。

cabbage_rose 发表于 2008-02-05 09:16

加trace语句调试了一下,在myproc之前的可以打印出来,但是在紧跟myproc之后的就打印不出,真是搞不明白。

wenlq 发表于 2008-02-05 12:57

callmyproc(Vbranch) returning n;
只是把myproc()过程的结果放入n变量。并不返回值。

试试
return   myproc(Vbranch) with resume ;

还可以
       callmyproc(Vbranch) returning n;
         return n with resume;

[ 本帖最后由 wenlq 于 2008-2-5 13:01 编辑 ]

cabbage_rose 发表于 2008-02-05 13:10

好像不行吧,在这里执行“return myproc(Vbranch) with recume;”的话,就直接返回,退调用过程了吧。我试了,由于外层声明的返回值为三个,所以报错,编译不过去。您好像误会我的意思了,我是想让myproc(Vbranch)可以被循环调用,但是它只是执行循环的第一个值,也就是只执行了一次就退出调用过程了。没有按我的设想循环的被调用。

[ 本帖最后由 cabbage_rose 于 2008-2-5 13:15 编辑 ]

wenlq 发表于 2008-02-05 13:19

如果仅仅是 这3句
foreach select branch into Vbranch from jigou
      callmyproc(Vbranch) returning n;
end foreach
n应该取到 最后一个值。

cabbage_rose 发表于 2008-02-05 13:39

myproc(Vbranch) 实际上是一个过程,我不是为的要它的返回值,返回值仅仅是表达存储过程成功与失败的。myproc过程中要对数据做一些处理的,你是不是以为调用myproc是为了得到它的返回值呀?我的表述可能不太清楚。

cabbage_rose 发表于 2008-02-07 22:54

在foreach中加with hold后,可以执行
感谢wenlq和cloudflashes的帮助

riskyvall 发表于 2008-02-12 22:13

with hold 加在哪个地方

:) :)
页: [1]
查看完整版本: 关于存储过程调用的问题