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

ただし、このような基本的なことについては、「ハッキー」な実装が少ないとよいでしょう。

タイムスタンプについては、「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 に答える