2016-04-28 56 views
1

我正在運行ORACLE。而且我遇到了一個問題。任何人都可以告訴我,如何在創建過程中將約束的值設置爲來自同一表的列值的DEFAULT?例如:如何在表創建時將默認的contraint值作爲列值插入?

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

在上表中,我怎麼可以設置myvalue的的默認約束的值ID的連結值?也就是說,我希望myvalue字段的值是創建表時使用的id和名稱字段的值。僅使用CREATE表命令。如何做呢?

請幫我一把。 謝謝。

+2

要知道,兩個'VARCHAR2(20)'值的級聯可能會導致VARCHAR(** 40 **)。 'varchar2(30)'在這種情況下是不夠的。 –

+0

感謝您指出。我忽略了它。 –

回答

4

您可以嘗試修改表:

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

,或者你可以嘗試創建一個這樣的觸發器:

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

對於VARCHAR2數據類型,不需要'TO_CHAR(...)'。 –

+0

@WernfriedDomscheit: - 謝謝指出。更新它! –

+0

只是挑剔,但觸發器中添加的額外空間建議將'myvalue'聲明爲'varchar2(41)'。 – collapsar