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