【问题标题】:How to insert return value from last EXECUTE PROCEDURE in INFORMIX如何在 INFORMIX 中插入最后一个 EXECUTE PROCEDURE 的返回值
【发布时间】:2015-01-06 21:28:57
【问题描述】:

这应该相对容易,但我是 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)
);

失败了!

【问题讨论】:

    标签: stored-procedures return-value informix


    【解决方案1】:

    您可以在大多数需要表达式的地方使用FUNCTIONPROCEDURE 的输出。所以这应该就是你所需要的:

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

    更新

    在 cmets 中的进一步讨论已确定该过程中有一些 DML,因此上述解决方案不起作用。 (Informix 不允许这样做,大概是为了避免无限循环和递归)。

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

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

    但也可能出于与原件相同的原因而被拒绝。

    【讨论】:

    • 谢谢!我试过了,实际上我正在更新:UPDATE someTable set id= MYPROC(foo,bar) WHERE ...; 它给了我675: Illegal SQL statement in SPL routine.
    • 这表明该函数本身正在执行一些 DML?这可能是不允许的。
    • 这个函数确实做了一些插入。
    • 这就解释了。你需要采取不同的方式。
    • 谢谢。我最终做的是在执行 proc 之后,我使用定制的子选择再次获得相同的结果编号,然后我将该编号插入我的表中。如果有人有更好的解决方案,我仍然有兴趣知道。
    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 2013-09-13
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多