2 つの列と複数の行を返す 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() はルックアップを行います。
関数を 1 つのクエリとして書き直そうとしました。ここに 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'))
しかし、それでもうまくいきませんでした。