Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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
Firebird2.5 为什么';这个SQL不能运行吗?Firebird存储过程_Firebird2.5_Sql_Stored Procedures_Firebird - Fatal编程技术网

Firebird2.5 为什么';这个SQL不能运行吗?Firebird存储过程

Firebird2.5 为什么';这个SQL不能运行吗?Firebird存储过程,firebird2.5,sql,stored-procedures,firebird,Firebird2.5,Sql,Stored Procedures,Firebird,我在IBExpert中执行了以下简单查询,结果很好: SELECT pd.NOME_PRODUTO, es.QTDE_MINIMA FROM TBL_ESTOQUE es, TBL_PRODUTO pd WHERE es.qtde_estoque = 0 AND es.produto = pd.id ORDER BY pd.NOME_PRODUTO 但是,如果我创建一个具有两个输出参数的存储过程(请参见下文) 我收到这样的信息: 单件选择中有多行。单例

我在
IBExpert
中执行了以下简单查询,结果很好:

SELECT
   pd.NOME_PRODUTO,
   es.QTDE_MINIMA
FROM
   TBL_ESTOQUE es,
   TBL_PRODUTO pd
WHERE
   es.qtde_estoque = 0
   AND es.produto = pd.id
ORDER BY
   pd.NOME_PRODUTO
但是,如果我创建一个具有两个输出参数的存储过程(请参见下文)

我收到这样的信息:

单件选择中有多行。单例中的多行 选择。在程序“SPD_SALDO_PROD_ZERADO_ESTOQUE”行:7,列:3”


这是什么?我不明白发生了什么…

rstrelba的回答说明了如何解决问题。如果你想了解它,下面是发生的事情

FOR SELECT ...
INTO ...
DO SUSPEND;
Firebird存储过程中的
suspend
向调用者返回一行。它可以以各种不同的方式使用,可以被认为类似于Python的
yield
语句:suspend操作并发送回单个值(本例中为行),然后在调用者请求更多数据时继续。(出于技术原因,必须这样做,因为数据库驱动程序并不总是一次提取整个结果集。)


您得到了一个
select
查询,该查询可以返回任意数量的值,然后是一个
suspend
。Firebird正在出错,告诉您这可能是错误的。您要做的是将select放入for循环,该循环将遍历结果集,并为每行挂起一次,正如rstrelba的回答所示速率。这确保调用者返回所有结果。

错误消息非常清楚,不是吗?select返回多少行?恐怕您有点错。我认为问题不在
挂起部分,而在
进入部分。
FOR SELECT ...
INTO ...
DO SUSPEND;