DB2:如何生成总是作为语句使用会话用户 [英] DB2: How to get generated always as statement to work with session user
问题描述
我需要把一个用户标签放到一个表中,并没有设法弄清楚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
返回VARCHAR(128)
包含SQL确定EXTERNAL ACTION
BEGIN
返回session_user;
END
GO
CREATE TABLE xxx(
i INTEGER,
t VARCHAR(128)一般生成(XXX.CURRENT_USER(i))
)
然而,对于这样的基本事情来说,这将是一个很好的hacky实现。 / p>
对于时间戳,有每一个更改更新为更改TIMESTAMP的声明,但没有其他注册变量的等价物。
帮助非常感谢
这是否有效?
CREATE TABLE xxx(
i INTEGER,
t VARCHAR(128)WITH DEFAULT session_user
);
我没有手头的DB2来检查,但这与使用的语法非常相似其他数据库(尽管更典型的语法不使用 WITH
)。
I need to get a userstamp into a table and have not managed to figure out how the GENERATED FOR EACH ROW ON UPDATE AS statement works with the SESSION_USER variable in DB2 10.5 (LUW).
Managed to get an implementation working using a function which has a fake variable for forcing the evaluation in update statements:
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))
)
However, would be nice have less "hacky" implementation for a basic thing like this.
For the time stamps there is that "FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP" statement but no equivalent for other register variables it seems.
Help is very much appreciated
Does this work?
CREATE TABLE xxx (
i INTEGER,
t VARCHAR(128) WITH DEFAULT session_user
);
I don't have DB2 on hand to check, but this is very similar to the syntax used in other databases (although the more typical syntax does not use WITH
).
这篇关于DB2:如何生成总是作为语句使用会话用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!