2012-11-20 2 views
8

Я хочу создать таблицу «продукт» и иметь столбец date, возможно ли, что текущая дата будет добавлена, когда я добавлю какую-либо информацию в таблицу?Oracle добавляет текущую дату

Если да, пожалуйста, пример этой таблицы

create table products (
id number not null, 
date number not null 
); 
+0

Связанный: http://stackoverflow.com/questions/12129051/what-is-the-sql-statement-oracle-to-alter-column-to-date-with-default-sysdate – Vadzim

ответ

23

Если предположить, что

  1. Ваш столбец не на самом деле называется date, поскольку это зарезервированное слово
  2. Ваш столбец фактически определяется как date а не как number
  3. Вы хотите заполнить столбец при вставке новой строки

Вы можете определить значение по умолчанию для столбца.

SQL> ed 
Wrote file afiedt.buf 

    1 create table products (
    2 id number not null, 
    3 dt date default sysdate not null 
    4*) 
SQL>/

Table created. 

SQL> 
SQL> insert into products(id) values(1); 

1 row created. 

SQL> select * from products; 

     ID DT 
---------- --------- 
     1 20-NOV-12 

Если вы хотите изменить dt колонку, когда вы UPDATE строку, вам нужно будет триггер

CREATE OR REPLACE TRIGGER trg_products 
    BEFORE INSERT OR UPDATE ON products 
    FOR EACH ROW 
BEGIN 
    :new.dt := sysdate; 
END; 

Триггер отменяет любое значение, переданное в качестве части заявления INSERT или UPDATE для колонка dt. Значение по умолчанию не будет.

+0

Я бежал почти так же, как и ваш первый образец, в который вы добавили новый столбец, установленный по умолчанию sysdate. Это обновило все предыдущие записи до sysdate. Есть ли способ оставить их пустыми, но пусть все новые записи автоматически дефолт для sysdate? – NealWalters

+0

Забыл отметить, что я делал ALTER TABLE, чтобы добавить новый столбец даты (не создавая новую таблицу). – NealWalters

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