【问题标题】:Oracle : toggle field and return the new valueOracle:切换字段并返回新值
【发布时间】:2013-10-17 09:58:13
【问题描述】:

我有两个/三个状态变量存储在 DB 表字段中,我想知道切换它们(从 1 到 0,反之亦然)并返回它们的新值的最佳方法是什么。 运行两个查询对我来说似乎太多了。 还有其他更好的方法吗?

这是我现在的查询(我还没有测试过):

UPDATE MyTable qrus
SET qrus.favorite=(CASE WHEN (qrus.favorite=0) THEN 1 ELSE 0 END)
WHERE <sth>;

我正在使用 OracleDataClient。

我不知道我是否可以在更新后插入一个额外的选择,但在同一个 CommandText 中。我会试试这个。 但是没有更好的方法吗?

【问题讨论】:

标签: .net sql oracle


【解决方案1】:

我不认为你想要什么是可能的。如果您非常希望您的应用程序只进行一次调用,您可以使用存储的函数来更新然后检索(或者相反,检索然后更新,没关系)。但这仍然是 2 条语句,只是应用程序只进行了 1 次调用。

【讨论】:

    【解决方案2】:

    您可以使用子查询来提取反转值并连接回父查询。然后使用RETURNING 子句。

    UPDATE MyTable qrus
    SET qrus.favorite = ( 
      SELECT CASE WHEN b.favorite = 0 THEN 1 ELSE 0 END
      FROM MyTable b WHERE grus.PK_FIELDS =b.PK_FIELDS
    )
    WHERE grus.PK_FIELDS = :pkFields
    RETURNING grus.favorite INTO :favorite;
    

    刚刚在Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production确认了这一点

    【讨论】:

      【解决方案3】:

      有关更多信息,我在 Oracle 网站上发布了一个问题。 https://forums.oracle.com/message/11234565

      【讨论】:

        【解决方案4】:

        更新 TABLENAME 设置状态 = decode(status,1,0,1)

        【讨论】:

          猜你喜欢
          • 2018-11-27
          • 2018-04-06
          • 1970-01-01
          • 2013-01-05
          • 1970-01-01
          • 1970-01-01
          • 2016-01-24
          • 2012-10-22
          • 1970-01-01
          相关资源
          最近更新 更多