Как установить условное значение DEFAULT для столбца в Oracle без использования триггеров? - PullRequest
1 голос
/ 28 июля 2011

Как установить условное значение DEFAULT для столбца в Oracle без использования триггеров? Я хочу достичь следующих потребностей:

  1. Если «flag1» = 1, то значение по умолчанию для столбца Newfield должно быть «4».
  2. Если «flag1» = 2, то значение по умолчанию для столбца Newfield должно быть «5».

Ответы [ 4 ]

5 голосов
/ 28 июля 2011

Вот для чего нужны триггеры. Используйте их.

2 голосов
/ 28 июля 2011

Столбец DEFAULT не может ссылаться на другой столбец, поэтому это невозможно.

Возможно, вы могли бы просто оставить значение по умолчанию, равное NULL, и затем иметь возможность изменить его следующим образом:

create view mytable_view as
select flag1, nvl(newfield, case flag1 when 1 then 4
                                       when 2 then 5
                            end) as newfield
from mytable;
1 голос
/ 28 июля 2011

Если столбец Newfield не нуждается в обновлении, вы можете просто реализовать его в представлении, как показал Тони, или в 11g вы можете сделать его виртуальным столбцом.

0 голосов
/ 29 июля 2011

Если 'flag' является чем-то сессионным (или операторским) уровнем, тогда SYS_CONTEXT может быть путем. Возможно, триггер BEFORE STATEMENT, если проблема избегает переключения контекста для каждой вставленной строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...