2012-07-20 90 views
0

創建表時如何重用先前列中提到的約束?創建表時重新使用約束

create table ticket_details(
    from_stn char(3) 
    constraint chk check(from_stn in ('vsh','mas','ndl')) 
    constraint nn NOT NULL, 
    to_stn char(3) 
    constraint nn1 NOT NULL, (instead of crea) 
    seat_no number(3) 
    constraint PK primary key, 
); 
+0

你的問題是什麼? – reporter 2012-07-20 08:43:11

+0

歡迎使用StackOverflow:如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確地格式化和語法突出它! – 2012-07-20 08:44:32

+0

使它成爲一個域約束,並讓from_stn和to_stn都基於該域。 – wildplasser 2012-07-20 10:52:40

回答

0

爲其他列重新使用約束是不可能的。如果需要,您必須將其定義爲其他列

1

域約束將在域的任何實例上執行。另外:改變時,你只能在一個地方改變它。 (語法可能在實現之間略有不同)

CREATE DOMAIN THE_STN CHAR(3) constraint THE_STN_check_da_value check(VALUE in ('vsh','mas','ndl')) 
     ; 

CREATE table ticket_details 
     (seat_no INTEGER NOT NULL PRIMARY KEY 
     , from_stn THE_STN NOT NULL 
     , to_stn THE_STN 
     ); 
INSERT INTO ticket_details(seat_no,from_stn,to_stn) VALUES (1, 'vsh', 'ndl'); -- succeeds 
INSERT INTO ticket_details(seat_no,from_stn,to_stn) VALUES (2, 'vsh', NULL); -- succeeds 
INSERT INTO ticket_details(seat_no,from_stn,to_stn) VALUES (2, 'lol', 'mas'); -- fails