Stored procedures 如何在INFORMIX中插入上一个执行过程的返回值

Stored procedures 如何在INFORMIX中插入上一个执行过程的返回值,stored-procedures,return-value,informix,Stored Procedures,Return Value,Informix,这应该相对容易,但我是informix新手 我有一个正在调用的存储过程executeprocedure。过程大致如下(但列数更多): 如何从Informix提示符中使用int,以便在后续插入中使用它 这大概就是我想做的。我没有改变程序内部的选项 > EXECUTE PROCEDURE MYPROC(foo,bar); (expression) 4104 1 row(s) retrieved. > INSERT INTO MYTABLE(val) VALUES(

这应该相对容易,但我是informix新手

我有一个正在调用的存储过程
executeprocedure
。过程大致如下(但列数更多):

如何从Informix提示符中使用
int
,以便在后续插入中使用它

这大概就是我想做的。我没有改变程序内部的选项

> 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)
);

失败了

您可以在大多数需要表达式的地方使用
函数
过程
的输出。因此,这应该是您所需要的全部:

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

更新

评论中的进一步讨论表明,程序中有一些DML,因此上述解决方案不起作用。(Informix不允许这样做,可能是为了避免无休止的循环和递归)

您可能会更幸运(未经测试):


但它也可能被拒绝的原因与原来的相同

谢谢!我试过了,实际上我正在做一个更新:
updatesometable set id=MYPROC(foo,bar)WHERE它给出了SPL例程中的
675:非法SQL语句。
这表明函数本身正在执行一些DML?这可能是不允许的。函数确实做了一些插入。这就可以解释了。你需要换一种方式来做。谢谢。我最后做的是,在执行proc之后,我使用一个定制的子选择再次获得相同的结果编号,然后将该编号插入到表中。如果有人有更好的解决方案,我仍然有兴趣知道。
> INSERT INTO MYTABLE(val) VALUES( MYPROC(foo,bar) );
INSERT INTO mytable 
SELECT a.result FROM TABLE(myproc('foo','bar')) AS a(result)