2013-06-03 16 views
5

Sto tentando di creare una nuova tabella in Oracle 11g in cui il valore predefinito per una colonna è l'utente attualmente connesso. Ho bisogno di fare questo è per scopi di registrazione.Impostazione del valore predefinito per l'utente corrente in Oracle

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

Come posso scrivere la sezione DEFAULT CURRENT_USER quindi ci vorrà l'utente Oracle corrente come valore di default? So che potrei usare un trigger, ma io non avrei dovuto ...

risposta

7

è necessario utilizzare USER non CURRENT_USER:

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

SQL Fiddle

La lunghezza massima di un utente è 30 , quindi potresti ridurlo e aumenterei la dimensione della tua colonna DESCRIZIONE a meno che tu non sia sicuro che tutto arriverà con meno di 51 caratteri.

+0

+1 @ Ben - è tutto vero e mi hai battuto di circa 2 secondi :) –

+0

Per fare eco al commento di Gordon, una colonna CREATED_AT potrebbe anche essere una buona idea. – Ben

+0

È possibile utilizzare 'LOCALTIMESTAMP' come valore' DEFAULT'? In realtà, uno dei motivi per utilizzare un trigger anziché un valore predefinito è impedire a chiunque di impostare esplicitamente le colonne 'created_by' o' created_at'. –

1

Prova user invece:

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

A proposito, penso anche created_at per il datetime è un'altra colonna di default utile.

Problemi correlati