У меня есть хранимая процедура Informix, которая возвращает два столбца и несколько строк. Я могу использовать "EXECUTE FUNCTION curr_sess (2009, 'SP')" "отлично, но как мне получить результаты во временной таблице.
РЕДАКТИРОВАТЬ: Мы находимся на версии 10.00.HC5
Проверка идеи Джонатана Леффлера не сработала.
EXECUTE FUNCTION curr_sess(2009,'SP')
отлично работает. Тогда я сделал
CREATE TEMP TABLE t12(yr smallint, sess char(4));
Но когда я пытаюсь
INSERT INTO t12 EXECUTE FUNCTION curr_sess(2009,'SP');
Это не работает, я получаю «Недопустимый оператор SQL в программе SPL». ошибка.
Источник для 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
EDIT: sess_sort () выполняет поиск.
Я пытался переписать функцию одним запросом. Вот следующая_сессия:
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'))
Но это все равно не сработало.