2013-06-03 48 views
5

我想在Oracle 11g中創建一個新表,其中列的默認值是當前登錄的用戶。我需要這樣做是爲了記錄目的。在Oracle中爲當前用戶設置默認值

CREATE TABLE tracking (
    pk NUMBER(19,0) PRIMARY KEY, 
    description VARCHAR2(50), 
    created_by VARCHAR2(128) DEFAULT CURRENT_USER 
); 

我怎麼能寫DEFAULT CURRENT_USER部分,因此將採取當前Oracle用戶的默認值?我知道我可以使用觸發器,但我不應該......

回答

7

您需要使用USERCURRENT_USER

CREATE TABLE tracking (
    pk NUMBER(19,0) PRIMARY KEY, 
    description VARCHAR2(50), 
    created_by VARCHAR2(128) DEFAULT USER 
); 

SQL Fiddle

用戶的最大長度爲30 ,所以你可以減少這個,並且我會增加你的DESCRIPTION列的大小,除非你確定所有東西都會少於51個字符。

+0

+1 @Ben - 這都是真的,你擊敗了我約2秒:) –

+0

要回應Gordon的評論CREATED_AT專欄可能也是一個好主意。 – Ben

+0

'LOCALTIMESTAMP'可以用作'DEFAULT'值嗎?實際上,使用觸發器而不是默認值的一個原因是爲了防止任何人明確設置'created_by'或'created_at'列。 –

1

嘗試user代替:

CREATE TABLE tracking (
    pk NUMBER(19,0) PRIMARY KEY, 
    description VARCHAR2(50), 
    created_by VARCHAR2(128) DEFAULT USER 
); 

順便說一句,我也覺得created_at的日期時間是另一個有用的默認列。

相關問題