Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql IBM SolidDB,由于执行语句时没有结果,获取结果失败_Sql_Stored Procedures - Fatal编程技术网

Sql IBM SolidDB,由于执行语句时没有结果,获取结果失败

Sql IBM SolidDB,由于执行语句时没有结果,获取结果失败,sql,stored-procedures,Sql,Stored Procedures,在我的存储过程中,我做了很多: 执行SQL执行 执行SQL获取 然而,当execute语句不返回任何内容并且我试图获取结果时,我会遇到一些错误(错误23506:游标中的表结束)。 在尝试获取结果之前,是否仍要检查结果是否包含任何内容 我尝试过SQLSUCCESS和SQLROWCOUNT,但是SQLSUCCESS只告诉我语句是否失败,而不告诉我它是否返回任何内容,而且SQLROWCOUNT显然只适用于插入、更新和删除。Not select语句。比较DB2和SolidDB过程 在“清单15.SQLS

在我的存储过程中,我做了很多:

执行SQL执行

执行SQL获取

然而,当execute语句不返回任何内容并且我试图获取结果时,我会遇到一些错误(错误23506:游标中的表结束)。 在尝试获取结果之前,是否仍要检查结果是否包含任何内容

我尝试过SQLSUCCESS和SQLROWCOUNT,但是SQLSUCCESS只告诉我语句是否失败,而不告诉我它是否返回任何内容,而且SQLROWCOUNT显然只适用于插入、更新和删除。Not select语句。

比较DB2和SolidDB过程

在“清单15.SQLSUCCESS显示结果集结束”一节中,IBM参考资料显示了这个代码段

EXEC SQL FETCH sel_tab;
WHILE SQLSUCCESS LOOP
    EXEC SQL FETCH sel_tab;
END LOOP
它还说

当FETCH cursor语句失败时 并且找不到另一行 检索时,SQLSUCCESS的值为 设置为0,则WHILE循环结束

这几乎告诉我,如果第一个
execsqlfetch
没有找到行,那么WHILE循环甚至不应该被输入。但您似乎在暗示代码中没有发生这种情况

稍后,在“Table7.solidDB SQLERROR of cursorname语句”中,它显示了这段代码。(我的注解。)

只要查询有效,COUNT()将始终至少返回一行。但这需要更多的数据库往返。我认为您最好还是坚持尝试获取一行并捕获错误的习惯用法。

比较了DB2和SolidDB过程

在“清单15.SQLSUCCESS显示结果集结束”一节中,IBM参考资料显示了这个代码段

EXEC SQL FETCH sel_tab;
WHILE SQLSUCCESS LOOP
    EXEC SQL FETCH sel_tab;
END LOOP
它还说

当FETCH cursor语句失败时 并且找不到另一行 检索时,SQLSUCCESS的值为 设置为0,则WHILE循环结束

这几乎告诉我,如果第一个
execsqlfetch
没有找到行,那么WHILE循环甚至不应该被输入。但您似乎在暗示代码中没有发生这种情况

稍后,在“Table7.solidDB SQLERROR of cursorname语句”中,它显示了这段代码。(我的注解。)


只要查询有效,COUNT()将始终至少返回一行。但这需要更多的数据库往返。我认为您最好还是坚持这样一种习惯做法,即尝试获取一行,然后捕获错误。

也许您应该发布更多的代码。也许您应该发布更多的代码。我只考虑获取一行,而不是在多行之间循环。但问题是相同的,即当没有行可提取时,第一次execsqlfetch失败并出现SolidDB错误。这就是为什么我想在EXECUTE和FETCH之间做一个检查,这样我就知道我是否应该获取一些东西。我很确定在SolidDB下你不能这样做
EXEC SQL EXECUTE sel_tab USING…
执行您准备并存储在
sel_tab
中的语句,但它在服务器上执行——它只向客户端返回SQLSUCCESS。除非我遗漏了什么,否则SolidDB希望您获取一行并捕获错误。我只考虑获取一行,而不是循环访问几行。但问题是相同的,即当没有行可提取时,第一次execsqlfetch失败并出现SolidDB错误。这就是为什么我想在EXECUTE和FETCH之间做一个检查,这样我就知道我是否应该获取一些东西。我很确定在SolidDB下你不能这样做
EXEC SQL EXECUTE sel_tab USING…
执行您准备并存储在
sel_tab
中的语句,但它在服务器上执行——它只向客户端返回SQLSUCCESS。除非我遗漏了什么,否则SolidDB希望您获取一行并捕获错误。
SELECT COUNT(your_column_name) 
FROM your_table
WHERE ...;