sql 错误 (-659) 进入 select 语句所需的临时表
Posted
技术标签:
【中文标题】sql 错误 (-659) 进入 select 语句所需的临时表【英文标题】:sql error (-659) into temp table required for select statement 【发布时间】:2013-10-27 10:16:20 【问题描述】:我尝试创建一个简单的存储过程,它应该返回一个数据集作为 select 语句的结果。像这样:
CREATE PROCEDURE rr_reward()
SELECT a.emp_num,a.emp_name
FROM emp_data a
WHERE a.active_code = 1
END PROCEDURE
但我收到以下错误:
sql 错误 (-659) 写入 select 语句所需的临时表
【问题讨论】:
这个问题是关于 mysql 服务器的吗? DBMS 的女巫版本? Why does this SQL stored procedure require that a temp table be created for it to work (return results)?的可能重复 @juergend :我尝试按照该问题的回答,但我收到此错误:a subquery returned not eaxctly one row
我已经很久没有使用 Informix 了,但是认为要返回多行,您必须实际查看多个返回。见dbaspot.com/informix/…
只是我不想使用循环!
【参考方案1】:
错误a subquery returned not exactly one row
是因为您的查询返回一个集合,而不是单个行,the answer in the linked question assumes。
虽然问题的主旨与您的问题无关,但the very fine answer given by Jonathan in this question 显示了一个存储过程的结构,可以满足您的要求。
基本上,您定义一个ROW TYPE
对应于您的emp_num
和emp_name
列,然后将您的结果返回为该类型的MULTISET
。
但我必须说实话,我看不出一个 SP 这样做有什么理由。一个VIEW
沿线:
CREATE VIEW active_emp (emp_num, emp_data)
AS SELECT emp_num, emp_name
FROM emp_data
WHERE active_code = 1;
似乎更合乎逻辑和实用。
【讨论】:
【参考方案2】:查看手册中的“return with resume”,他们会变魔术......
示例 1) 哪个更简单...
CREATE FUNCTION teste_p2( pParam CHAR(100) DEFAULT '%') RETURNING CHAR(20) AS tabname
DEFINE vSql CHAR(500);
DEFINE vTab CHAR(20);
FOREACH select tabname into vTab
from systables where tabname like pParam
RETURN vTab WITH RESUME;
END FOREACH;
END FUNCTION;
示例 2) 更精致
CREATE FUNCTION teste_p1( pParam CHAR(100) DEFAULT '%')
RETURNING CHAR(20) AS tabname
DEFINE vSql CHAR(500);
DEFINE vTab CHAR(20);
LET vSql='select tabname from systables where tabname like ? ';
LET vTab='';
PREPARE sts1 FROM vSql;
DECLARE cur1 CURSOR FOR sts1;
OPEN cur1 USING pParam;
LOOP
FETCH cur1 INTO vTab ;
IF SQLCODE = 100 THEN exit; END IF;
RETURN vTab WITH RESUME;
END LOOP;
CLOSE cur1;
FREE cur1;
FREE sts1;
END FUNCTION
然后你这样调用:
select * from table(teste_p2('systab%')) as t(column);
如果您需要返回更多字段...只需在 RETURNING 声明中添加它们并 RETURN WITH RESUME。
【讨论】:
以上是关于sql 错误 (-659) 进入 select 语句所需的临时表的主要内容,如果未能解决你的问题,请参考以下文章