我有一个 Informix 存储过程,它返回两列和多行。我可以很好地使用“EXECUTE FUNCTION curr_sess(2009,'SP')”,但是如何将结果放入临时表中。
编辑:我们在版本 10.00.HC5
测试 Jonathan Leffler 的想法并没有奏效。
EXECUTE FUNCTION curr_sess(2009,'SP')
工作正常。然后我做了
CREATE TEMP TABLE t12(yr smallint, sess char(4));
但是当我尝试
INSERT INTO t12 EXECUTE FUNCTION curr_sess(2009,'SP');
它不起作用,我收到“SPL 例程中的非法 SQL 语句”。错误。
curr_sess 的来源
begin procedure
DEFINE _yr smallint;
DEFINE _sess char(4);
SELECT
DISTINCT
sess_vw.yr,
sess_vw.sess,
sess_vw.sess_sort
FROM
sess_vw
ORDER BY
sess_vw.sess_sort DESC
INTO temp tmp_sess WITH NO LOG;
SELECT
FIRST 1
tmp_sess.yr,
tmp_sess.sess
FROM
tmp_sess
WHERE
tmp_sess.sess_sort = sess_sort(iYear,sSess)
INTO temp tmp_final WITH NO LOG;
FOREACH cursor1 FOR
SELECT
tmp_final.yr,
tmp_final.sess
INTO
_yr,
_sess
FROM
tmp_final
RETURN _yr, _sess WITH RESUME;
END FOREACH;
DROP TABLE tmp_sess;
DROP TABLE tmp_final;
end procedure
编辑: sess_sort() 进行查找。
我试图将函数重写为一个查询。这是 next_sess:
SELECT
FIRST 1
sess_vw.sess_sort
FROM
sess_vw
WHERE
sess_vw.sess_sort > sess_sort(2009,'SP')
ORDER BY
sess_vw.sess_sort ASC
IBM 的某个人给我发了电子邮件,并建议使用这样的东西:
SELECT
*
FROM
TABLE(next_sess(2009,'SP'))
但这仍然没有奏效。