如何正确使用UPDATE ... RETURNING?

时间:2012-11-21 20:08:55

标签: sql firebird

我有一个可以设置属性的表,但是应该在一定时间后过期。如果我运行这样的查询,它会按预期工作:

update MY_TABLE
set PROP = :value, PROP_TIMEOUT = dateadd (7 day to CURRENT_TIMESTAMP)
where ID = :id

但是,如果我尝试同时检索计算的超时作为同一查询的一部分,它将返回一个空结果集,并且表中没有更新记录:

update MY_TABLE
set PROP = :value, PROP_TIMEOUT = dateadd (7 day to CURRENT_TIMESTAMP)
where ID = :id
returning PROP_TIMEOUT

这是Firebird中的错误,还是我做错了什么?使用FBEMBED版本2.5.1。

2 个答案:

答案 0 :(得分:2)

使用RETURNING [fields]时,需要指定INTO [variables]。 INTO仅适用于PSQL

示例:

:
update MY_TABLE
set PROP = :value, PROP_TIMEOUT = dateadd (7 day to CURRENT_TIMESTAMP)
where ID = :id
returning PROP_TIMEOUT
into :ret_prop_timeout; -- variable needs to be declared
:
suspend; -- to return a output row

答案 1 :(得分:0)

我建议您阅读此Firebird文档页面:http://www.firebirdsql.org/refdocs/langrefupd25-update-or-insert.html