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