使用cfscript中的addstoredproc方法出现错误

3

我正在使用cfscript调用存储过程,但当我在调用中添加addProcResult方法时,ColdFusion会返回错误“指定的键result在结构体中不存在。”删除该方法可修复错误并不影响结果,但我仍想知道为什么出现错误。使用<cfstoredproc>和<cfprocparam>不会生成该错误。我正在运行CF9。我的代码如下:

spService = new storedProc();
spService.setDatasource("mydb");
spService.setProcedure("someSP");
spService.setUsername("TaskRunner");
spService.setPassword("password");
spService.addProcResult(name="result",resultset=1);
spService.execute();

1
存储过程是否实际返回结果集?还是通过输出参数返回响应?存储过程可以两者都做(或都不做)...但如果它只做后者-你将得不到结果集,因此,将没有任何东西可以倒入其中,这可能解释了为什么在删除调用保存/存储“不存在的结果集”的操作后,您不会收到错误。 - Shawn Holmes
该过程不返回结果集或输出。所以我想这是有道理的,但为什么在使用标签时它不会出错呢? - RHPT
1
我的猜测是:与以前版本的CF向后兼容。由于9添加了对基于脚本的过程调用的支持,当发生愚蠢错误时,他们有更大的灵活性来抛出更严重的错误 - 但在CF标记中没有这种奢侈品。巧合的是,如果你实例化一个Java对象并调用一个返回NULL的方法,同时尝试将一个变量设置为其结果,当你尝试读取它时,你会得到一个“变量未定义错误”,即使从代码中清楚地看出你调用了CFSET。类似的问题 - CFSET仍然会执行 - 但它包含的内容不存在。 - Shawn Holmes
1个回答

2

如果你的存储过程实际上没有返回结果集(可能只返回输出参数或者根本什么也不返回),那么你将会遇到这个错误。

只需要删除对.addProcResult()的调用,问题就可以解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接