2016-09-25 9 views
0

userstamp를 테이블로 가져와 GOTED FOR UPDATE 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