2012-11-20 84 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 

如果您希望在UPDATE行修改dt列,你需要一个触发

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

触发将覆盖传递中作为INSERTUPDATE语句的一部分的任何值dt列。默认值不会。

+0

我跑得几乎一样您的第一个示例,您将新列设置为默认sysdate。这更新了所有以前的记录到sysdate。有没有办法让它们为空,但是让所有新记录自动默认为sysdate? – NealWalters

+0

忘了提及,我在做ALTER TABLE来添加新的日期列(不是创建新表)。 – NealWalters