2016-09-25 26 views
0

我需要將userstamp獲取到表中,並且無法弄清楚DB2中的SESSION_USER變量如何處理GENERATED FOR EACH ROW ON UPDATE AS語句10.5(LUW)。DB2:如何始終生成語句以與會話用戶一起工作

設法使用具有迫使在UPDATE語句評估假變量的函數工作的落實:

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」語句,但似乎沒有其他寄存器變量的等價物。

幫助非常感謝

回答

0

這是行不通的嗎?

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

我沒有手頭上的DB2來檢查,但是這是非常相似的其他數據庫中使用(雖然較典型的語法不使用WITH)的語法。

+0

感謝您的反饋意見。不幸的是,它不適用於更新聲明。我想自動捕捉誰修改了行而不使用觸發器。 – JMX

+0

@JMX。 。 。我不認爲你的代碼也會這樣做。我認爲你需要使用觸發器。 –

+0

實際上,如果函數依賴於行值,如列「我」在這種情況下。 – JMX