2014-11-10 2 views
0

Это должно быть относительно легко, но я новичок в informix.Как вставить возвращаемое значение из последней ПРОЦЕДУРЫ EXECUTE в INFORMIX

У меня есть сохраненная процедура, которую я звоню с EXECUTE PROCEDURE. Прок примерно следующим образом (но с тонной больше столбцов):

CREATE PROCEDURE MYPROC (
    foo int, 
    bar int 
) returning int; 

Как я могу использовать, что intиз Informix оперативной использовать его в последующей вставки?

Это примерно то, что я хотел бы сделать. У меня нет возможности изменить внутренности proc.

> EXECUTE PROCEDURE MYPROC(foo,bar); 

(expression) 

     4104 

1 row(s) retrieved. 

> INSERT INTO MYTABLE(val) VALUES(I_DONT_KNOW_WHAT_GOES_HERE); 

Я уже попробовал этот

> INSERT INTO MYTABLE(val) VALUES(
    EXECUTE PROCEDURE MYPROC(foo,bar) 
); 

и не удалось!

ответ

1

Вы можете использовать вывод FUNCTION или PROCEDURE в большинстве мест, где ожидается выражение. Так что это должно быть все, что вам нужно:

> INSERT INTO MYTABLE(val) VALUES(MYPROC(foo,bar)); 

Update

Дальнейшее обсуждение в комментариях определил, что эта процедура имеет некоторые DML в нем, поэтому решение выше не работает. (Informix не позволяет этого, по-видимому, избегать бесконечных циклов и рекурсии).

Вы могли бы иметь больше удачи с этим (непроверенные):

INSERT INTO mytable 
SELECT a.result FROM TABLE(myproc('foo','bar')) AS a(result) 

Но это также может быть отказано по той же причине, что и оригинал.

+0

Спасибо! Я попробовал это, на самом деле я делаю обновление: 'UPDATE someTable set id = MYPROC (foo, bar) WHERE ...;' и он дает мне '675: нелегальный оператор SQL в подпрограмме SPL. ' – alexg

+0

Это говорит о том, что функция сама выполняет некоторые DML? Это может быть запрещено. – RET

+0

Функция действительно делает некоторые вставки. – alexg

Смежные вопросы