2016-04-28 6 views
1

Ich betreibe ORACLE. Und ich stecke mit einem Problem fest. Kann mir jemand sagen, wie kann ich einen DEFAULT Constraint-Wert als einen Spaltenwert aus der gleichen Tabelle während der Erstellung festlegen? Zum Beispiel:Wie fügt man zum Zeitpunkt der Tabellenerstellung den Standardwert für den Contraint als Spaltenwert ein?

CREATE table testing 
(
id varchar2(20), 
name varchar2(20), 
myvalue varchar2(30) default id + name 
) 

In der obigen Tabelle, Wie kann ich die myvalue ‚s Wert der Standardeinschränkung als verkettete Wert von id und Namen ?? Das heißt, ich möchte myvalue Feld Wert die Werte der ID und Name Felder sein, wenn die Tabelle OR erstellt wird mit dem CREATE-Tabellenbefehl ONLY. Wie kann es gemacht werden?

Bitte helfen Sie mir. Danke.

+2

Seien Sie sich bewusst, Verkettung von zwei 'varchar2 (20)' Werte kann VARCHAR (** 40 **) ergeben. 'varchar2 (30)' ist in diesem Fall nicht ausreichend. –

+0

Danke, dass Sie darauf hingewiesen haben. Ich habe es übersehen. –

Antwort

4

Sie können versuchen, Ihren Tisch zu modifizieren, wie:

ALTER TABLE testing 
MODIFY (myvalue VARCHAR2(40) GENERATED ALWAYS AS (id || ' ' || name) VIRTUAL); 

oder Sie können versuchen, eine TRIGGER wie diese zu erstellen:

CREATE OR REPLACE TRIGGER  myTrigger 
BEFORE  INSERT OR UPDATE 
ON  testing 
FOR EACH ROW 
BEGIN 
    :NEW.myvalue:= :NEW.id 
       || ' ' 
       || :NEW.name; 
END; 
+0

Sie benötigen 'TO_CHAR (...)' nicht für einen VARCHAR2-Datentyp. –

+0

@WernfriedDomscheit: - Danke für das Zeigen. Aktualisiert es! –

+0

Nur pingelig, aber der zusätzliche Platz im Trigger schlägt vor, 'myvalue' als' varchar2 (41) 'zu deklarieren. – collapsar

Verwandte Themen