首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL分配特定值

Oracle SQL分配特定值
EN

Stack Overflow用户
提问于 2019-03-12 10:47:20
回答 2查看 198关注 0票数 0

因此,我正在做我的课程工作,我被困在了该为这一部分做些什么上。问题是:

Flatpack(FlatpackID,Name,Colour,Type,UnitPrice)

  • FlatpackID应该由DBMS生成。
  • 名称最多有20个字符,不应该为空。
  • 颜色是可选的。
  • 型是一种(办公室,厨房,卧室,一般)
  • UnitPrice应该在5.00到500.00之间

好的,我需要帮助的是用粗体/斜体表示的那个。类型是(办公室,厨房,卧室,一般)之一。

我到底是怎么在我的

代码语言:javascript
复制
CREATE TABLE FLATPACK (


);

我问了,他们告诉我,它只允许这些价值观,而没有其他任何东西。

任何帮助都将不胜感激!谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-03-12 10:50:31

一种方法是检查约束:

代码语言:javascript
复制
constraint chk_flatpack_type check ( Type in ('Office', 'Kitchen', 'Bedroom', 'General') );

另一个选项是将外键约束设置为引用表,并使引用表仅包含这些值。

票数 2
EN

Stack Overflow用户

发布于 2019-03-12 10:56:19

这是一个选项(类型受check约束的限制):

代码语言:javascript
复制
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>

另一个,更好的(为什么?更灵活的是,您可以添加任何类型,而不需要更改表)选项是创建一个表,该表将由type列引用:

代码语言:javascript
复制
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或更高版本上),或者使用更低版本的标准选项--使用序列的触发器:

代码语言:javascript
复制
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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55119612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档