1

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

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

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

我正在使用 OracleDataClient。

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

4

4 回答 4

1

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

于 2013-10-17T10:09:02.910 回答
1

您可以使用子查询来拉取反转值并连接回父查询。然后使用一个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

于 2016-12-02T22:08:24.453 回答
0

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

于 2013-10-17T15:31:22.750 回答
0

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

于 2015-04-08T23:18:40.437 回答