0

我需要将用户戳记入表中,但没有设法弄清楚 GENERATED FOR EACH ROW ON UPDATE AS 语句如何与 DB2 10.5 (LUW) 中的 SESSION_USER 变量一起使用。

设法使用具有用于强制更新语句中的评估的假变量的函数来实现工作:

CREATE OR REPLACE FUNCTION XXX.CURRENT_USER( tmp varchar(128))
    SPECIFIC xxx.XXX_CURRENT_USER
RETURNS VARCHAR(128) 
CONTAINS SQL DETERMINISTIC NO EXTERNAL ACTION 
BEGIN
  RETURN session_user ;
END
GO

CREATE TABLE xxx (
    i INTEGER,
    t VARCHAR(128) GENERATED ALWAYS AS (XXX.CURRENT_USER(i))
)

但是,对于像这样的基本事物,少一些“hacky”实现会很好。

对于时间戳,有“FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP”语句,但似乎没有其他寄存器变量的等效项。

非常感谢帮助

4

1 回答 1

0

这行得通吗?

CREATE TABLE xxx (
    i INTEGER,
    t VARCHAR(128) WITH DEFAULT session_user
);

我手头没有要检查的 DB2,但这与其他数据库中使用的语法非常相似(尽管更典型的语法不使用WITH.

于 2016-09-25T11:39:01.367 回答