【问题标题】:Informix equivalent to Oracle's UPDATE ... RETURNING INTO statementInformix 相当于 Oracle 的 UPDATE ... RETURNING INTO 语句
【发布时间】:2012-07-16 12:53:15
【问题描述】:

在 Oracle 中,我可以从 UPDATE 语句中返回信息,如下所示:

UPDATE SOME_TABLE
SET SOME_COL = SYSDATE
WHERE
    ...
RETURNING SOME_COL INTO :OutParameter

结合受影响的行数,这允许检查一行是否存在,更新它,然后返回有关更新行的一些信息(如新更新的值或行 ID 或其他),所有这些都在一个查询中完成.

这也可以在 SQL Server 中使用 OUTPUT 子句来完成。

Informix 中有类似的东西吗?我检查了 Informix 的 UPDATE syntax 和 它看起来没有任何等价物......还有其他选择吗?

【问题讨论】:

    标签: sql oracle informix


    【解决方案1】:

    受影响的行数可从 SQLCA 记录中获得,该记录可通过DBINFO('sqlca.sqlerrd2')以纯 SQL 或 SPL 获得

    例如:

    UPDATE table SET foo = 'bar' WHERE baz = 'quux';
    INSERT INTO log_table (date_stamp, msg, row_count)
      VALUES (CURRENT, "Updated foo to bar", DBINFO('sqlca.sqlerrd2'));
    

    请参阅fine manual

    在 Informix 中没有与 RETURNING 子句等效的东西。这个概念对我来说似乎很奇怪 - 当多行更新时,它如何工作,具有动态内容,如 SET foo = baz * bar 其中 foo、baz 和 bar 都是列,并且所有受影响的元组都没有共享单个值?

    【讨论】:

    • 您可以将RETURNING 子句与进入集合的值一起使用,以便一次捕获多行。
    • 扩展 Adam 的话,RETURNING 子句的非常有用之处在于您的 UPDATE、INSERT 或 DELETE 语句返回有关修改行的信息。在您的示例中,您可以添加 RETURNING foo INTO :F 使其在乘以 baz * bar 后输出 foo 的最终值。这将适用于由序列器、随机器、触发器、函数等更改的值。
    • 无论如何,我已经接受了您的“Informix 中没有与 RETURNING 子句等效”的答案。
    猜你喜欢
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多