2016-09-25 1 views
0

Мне нужно получить пользовательский столб в таблицу и не удалось выяснить, как инструкция GENERATED FOR EACH ROW ON UPDATE AS работает с переменной SESSION_USER в DB2 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)) 
) 

Однако, было бы неплохо иметь меньше «Hacky» реализацию основной вещи, как это ,

Для штампов времени существует, что инструкция «ДЛЯ КАЖДОГО РУКА НА ОБНОВЛЕНИИ КАК СКОРОСТЬ ИЗМЕНЕНИЯ ВРЕМЕНИ», но не эквивалентна для других переменных регистра, кажется.

Справка очень ценится

ответ

0

Это работает?

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

Я не DB2 под рукой, чтобы проверить, но это очень похоже на синтаксис, используемый в других базах данных (хотя более типичный синтаксис не использует WITH).

+0

Спасибо за отзыв. К сожалению, это не работает с операциями обновления. Я бы хотел автоматически поймать, кто изменил строку без использования триггеров. – JMX

+0

@JMX. , , Я не думаю, что ваш код тоже это сделает. Я думаю, вам нужно использовать триггер. –

+0

На самом деле, если функция зависит от значений строк, например, столбца «i». – JMX

Смежные вопросы