Oracle SQL指定特定的值
所以我正在做我的课程作业,我有点被困在这一部分该做什么。问题是: 扁平封装(扁平封装、名称、颜色、类型、单价)Oracle SQL指定特定的值,sql,oracle,check-constraints,Sql,Oracle,Check Constraints,所以我正在做我的课程作业,我有点被困在这一部分该做什么。问题是: 扁平封装(扁平封装、名称、颜色、类型、单价) FlatpackID应该由DBMS生成 名称最多有20个字符,不应为空 颜色是可选的 类型是(办公室、厨房、卧室、普通)类型之一 单价应介于5.00和500.00之间 好的,我需要帮助的是一个粗体/斜体字,即“Type是(办公室、厨房、卧室、普通)”中的一个 我到底是如何在我的职责范围内宣布这一点的 CREATE TABLE FLATPACK ( ); 我问了一下,他们告诉我
- FlatpackID应该由DBMS生成
- 名称最多有20个字符,不应为空
- 颜色是可选的
- 类型是(办公室、厨房、卧室、普通)类型之一
- 单价应介于5.00和500.00之间
CREATE TABLE FLATPACK (
);
我问了一下,他们告诉我,只允许使用这些值,不允许使用其他值
任何帮助都将不胜感激!谢谢一种方法是检查约束:
constraint chk_flatpack_type check ( Type in ('Office', 'Kitchen', 'Bedroom', 'General') );
SQL> CREATE TABLE flatpack
2 (
3 flatpackid NUMBER CONSTRAINT pk_fp PRIMARY KEY,
4 name VARCHAR2 (20) NOT NULL,
5 colour VARCHAR2 (20),
6 TYPE VARCHAR2 (20)
7 CONSTRAINT ch_ty CHECK
8 (TYPE IN ('Office',
9 'Kitchen',
10 'Bedroom',
11 'General')),
12 unitprice NUMBER CONSTRAINT ch_pr CHECK (unitprice BETWEEN 5 AND 500)
13 );
Table created.
SQL>
另一个选项是对引用表设置外键约束,并使引用表仅包含这些值。一种方法是检查约束:
constraint chk_flatpack_type check ( Type in ('Office', 'Kitchen', 'Bedroom', 'General') );
SQL> CREATE TABLE flatpack
2 (
3 flatpackid NUMBER CONSTRAINT pk_fp PRIMARY KEY,
4 name VARCHAR2 (20) NOT NULL,
5 colour VARCHAR2 (20),
6 TYPE VARCHAR2 (20)
7 CONSTRAINT ch_ty CHECK
8 (TYPE IN ('Office',
9 'Kitchen',
10 'Bedroom',
11 'General')),
12 unitprice NUMBER CONSTRAINT ch_pr CHECK (unitprice BETWEEN 5 AND 500)
13 );
Table created.
SQL>
另一个选项是对引用表设置外键约束,并使引用表仅包含这些值。这是一个选项(具有受检查约束限制的类型):
另一个,更好(为什么?更灵活,因为您可以添加所需的任何类型,而无需更改表格)选项是创建一个表格,该表格将由类型列引用:
SQL> CREATE TABLE flatpack_type (TYPE VARCHAR2 (20) CONSTRAINT pk_ty PRIMARY KEY);
Table created.
SQL> CREATE TABLE flatpack
2 (
3 flatpackid NUMBER CONSTRAINT pk_fp PRIMARY KEY,
4 name VARCHAR2 (20) NOT NULL,
5 colour VARCHAR2 (20),
6 TYPE VARCHAR2 (20)
7 CONSTRAINT fk_fp_ty REFERENCES flatpack_type (TYPE),
8 unitprice NUMBER CONSTRAINT ch_pr CHECK (unitprice BETWEEN 5 AND 500)
9 );
Table created.
SQL> insert into flatpack_type --> valid values
2 select 'Office' from dual union all
3 select 'Kitchen' from dual union all
4 select 'Bedroom' from dual union all
5 select 'Genral' from dual;
4 rows created.
从ID开始,您可以使用标识列(如果在12c或更高版本上),或低版本的标准选项-使用序列的触发器:
SQL> create sequence seq_fp;
Sequence created.
SQL> create or replace trigger trg_bi_fp
2 before insert on flatpack
3 for each row
4 begin
5 :new.flatpackid := seq_fp.nextval;
6 end;
7 /
Trigger created.
SQL>
这是一个选项(具有受检查约束限制的类型):
另一个,更好(为什么?更灵活,因为您可以添加所需的任何类型,而无需更改表格)选项是创建一个表格,该表格将由类型列引用:
SQL> CREATE TABLE flatpack_type (TYPE VARCHAR2 (20) CONSTRAINT pk_ty PRIMARY KEY);
Table created.
SQL> CREATE TABLE flatpack
2 (
3 flatpackid NUMBER CONSTRAINT pk_fp PRIMARY KEY,
4 name VARCHAR2 (20) NOT NULL,
5 colour VARCHAR2 (20),
6 TYPE VARCHAR2 (20)
7 CONSTRAINT fk_fp_ty REFERENCES flatpack_type (TYPE),
8 unitprice NUMBER CONSTRAINT ch_pr CHECK (unitprice BETWEEN 5 AND 500)
9 );
Table created.
SQL> insert into flatpack_type --> valid values
2 select 'Office' from dual union all
3 select 'Kitchen' from dual union all
4 select 'Bedroom' from dual union all
5 select 'Genral' from dual;
4 rows created.
从ID开始,您可以使用标识列(如果在12c或更高版本上),或低版本的标准选项-使用序列的触发器:
SQL> create sequence seq_fp;
Sequence created.
SQL> create or replace trigger trg_bi_fp
2 before insert on flatpack
3 for each row
4 begin
5 :new.flatpackid := seq_fp.nextval;
6 end;
7 /
Trigger created.
SQL>