2012-07-20 88 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