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之间

好的,我需要帮助的是一个粗体/斜体字,即“Type是(办公室、厨房、卧室、普通)”中的一个

我到底是如何在我的职责范围内宣布这一点的

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>