2015-01-14 5 views
1

Как сделать что-то вроде этого ...Alter таблицы добавить столбец как оператор выбора

alter table customer_schedule add (week_number as (TO_CHAR((SCHEDULE_DATE),'iw')) 

В чем SCHEDULE_DATE это один из существующих столбцов в таблице

+0

Почему вы хотите сохранить производное значение в таблице? –

+0

Я хочу разработать форму, в которой, когда выбран номер недели, он должен заполнить список из другой таблицы. Я сделал то же самое, используя месяц, но теперь я хочу его с номером недели. – Kimaya

+0

Какая ошибка вы столкнулись – Exhausted

ответ

7

Здесь вы найдете VIRTUAL COLUMN. Если вы находитесь на 11g и выше, вы могли бы, конечно, сделать -

 
alter table table_name 
add (column_name [data_type] [generated always] as (column_expression) [virtual]); 

В вашем случае, это будет что-то вроде -

 
alter table customer_schedule add (week_number data_type generated always as (TO_CHAR((SCHEDULE_DATE),'iw') VIRTUAL) 
+0

Большое вам спасибо за ваше ценное время и ответ, но его не работает – Kimaya

+0

Вы сделали, чтобы много копировать/вставлять из документации, это должно быть 'alter table customer_schedule add (week_number NUMBER генерируется всегда как (TO_CHAR (SCHEDULE_DATE, 'iw')) VIRTUAL); ' –

+0

@Wernfried, я намеренно оставил параметр data_type для OP, потому что число '03' будет считаться как 3, а не 03. OP не упомянул, что хочет, чтобы это было числовое поле. –

0

предполагается ключевым слово по умолчанию, чтобы хранить значение когда существует некоторое значение отсутствует, но из-за ограничений, you cannot use a column name

выражение DEFAULT не может содержать ссылки на функции PL/SQL или других столбцов, псевдонимы LEVEL, PRIOR и ROWNUM, или константы даты, которые не указаны полностью.

Я думаю, что триггер ДО НАЧАЛА ВЕРСИЯ/ОБНОВЛЕНИЕ уровня должен делать то, что вы хотите сделать.

+0

Все, что есть в прошлом веке. Виртуальные столбцы были введены в 11g. –

+0

Предполагая, что OP имеет доступ к 11g .. – Sathya

+0

Я попросил OP предоставить информацию о версии. Если OP находится на 11g предыдущих базах данных, триггер будет единственным решением. –

2

На 9i, вы не можете использовать виртуальных колонок, так что я «d, вероятно, пойти с целью:

create view customer_schedule_view as 
    select 
     c.*, 
     to_char(c.schedule_date, 'iw')) week_number 
    from 
     customer_schedule c; 

конечно, в ваших формах вам нужно затем, чтобы выбрать с точки зрения, а из таблицы.