在Informix中执行存储过程有问题。我正在做一个简单的查询,它不起作用。这是一个查询:
SELECT
first 1 field1,
date1
FROM
historia_t
WHERE
field3 = 1
AND field4 = 1
AND date1 BETWEEN (CURRENT - 1 UNITS YEAR) AND CURRENT
ORDER BY
field1 desc 如果我在DbVisualizer中执行查询,我没有任何问题,但是如果我在Informix中执行查询(使用存储过程),我在“和date1之间(当前-1个单元年)和当前”之间的行中会出现一个新的错误。但是真正的问题是field1 desc;的顺序
我不知道为什么,但有时存储过程在使用Order时会返回错误。
注意:字段之所以出现是因为我认为它们对这个问题并不重要。
感谢先进的!
发布于 2015-11-24 19:09:48
当您通过DB-Access或等效方式运行SELECT语句时,程序负责创建游标、打开游标、获取数据、关闭游标和释放所使用的资源。
在存储过程中,您必须管理此处理。FOREACH循环自动做到这一点。如果使用动态SQL,还可以使用其他语句。
如果SELECT语句可能返回多行,则需要游标管理。如果SELECT语句只返回一行,则可以指定应该接收结果的变量。当SELECT返回单个行时,我注意到ORDER是无关紧要的--如果您有ORDER,就会有一个强有力的假设,即查询可能返回多个行。
例如,这个存储过程工作(并返回syssynonyms):
create procedure fk2() returning varchar(128) as tabname;
define t varchar(128);
select tabname into t from informix.systables where tabid = 9;
return t;
end procedure;但是如果有超过一排,你需要:
create procedure fk3() returning varchar(128) as tabname;
define t varchar(128);
foreach select tabname into t
from informix.systables
where tabid between 4 and 10
order by tabname # No semicolon permitted (don't ask!)
return t with resume;
end foreach;
end procedure;这将返回:
syscolauth
sysdepend
syssynonyms
syssyntable
systabauth
sysusers
sysviewshttps://stackoverflow.com/questions/33893032
复制相似问题