2016-09-25 8 views
0

ユーザー・スタンプを表に入れる必要があり、GENERATED FOR EACH ROW ON UPDATE AS文がDB2のSESSION_USER変数とどのように機能するか把握していない10.5(LUW)。DB2:セッション・ユーザーと連携するステートメントとして常に生成する方法

実装が更新ステートメントでの評価を強制ための偽の変数を持つ関数使用して作業を得ることができた

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)) 
) 

をしかし、いいだろう。このような基本的なことにはあまり「ハック」の実装を持っています。

タイムスタンプの場合、「各行を更新するには、ROW CHANGE TIMESTAMPとして」という文がありますが、他のレジスタ変数と同等のものはありません。

助けを歓迎します

答えて

0

これは機能しますか?

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

私がチェックするために手にDB2を持っていないが、これは(より一般的な構文はWITHを使用していないが)他のデータベースで使用される構文に非常によく似ています。

+0

フィードバックいただきありがとうございます。残念ながら、更新ステートメントでは機能しません。トリガーを使用せずに行を変更した人を自動的にトラップするようにしたいと思います。 – JMX

+0

@JMX。 。 。私はあなたのコードがそれを行うとは思わない。私はトリガーを使う必要があると思います。 –

+0

実際には、関数が行の値に依存する場合(この場合は列 "i"など)に行われます。 – JMX

関連する問題