首页 > 解决方案 > Oracle SQL 检查

问题描述

我正在尝试实现一个 Oracle SQL 数据库,在我的一个表中,我必须引入一个限制,该限制不允许同一组中有超过 4 人:

我试过这个:

CREATE TABLE PERSON (name VARCHAR (20) PRIMARY KEY, group VARCHAR (3), CHECK (COUNT (*) group FROM PERSON) <=4);

还有这个(除其他外):

CREATE TABLE PERSON (name VARCHAR (20) PRIMARY KEY, group VARCHAR (3), CHECK NOT EXISTS (Select COUNT(*) FROM PERSON GROUP BY group HAVING COUNT(*) > 4);

但是我每次都遇到错误(ORA-00934:此处不允许使用组功能或 ORA-02251:此处不允许使用子查询。

正确的方法是什么?

标签: sqloracle

解决方案


您对此有多个问题

CREATE TABLE PERSON (
    name VARCHAR(20) PRIMARY KEY,
    group VARCHAR(3),
    CHECK (COUNT (*) group FROM PERSON) <=4);
);
  1. Oracle 明确VARCHAR2()倾向于VARCHAR().
  2. GROUP是一个非常糟糕的列名称,因为它是一个关键字。当然,您可以找到类似group_name的名称或其他名称。
  3. CHECK约束仅一行中起作用。

处理此问题的最佳方法可能是:

  • 创建一个名为groups-- 或其他名称的新表。它应该有一个group_id以及group_namenum_persons
  • 添加触发器以使s、s 和s toperson保持counter最新。insertdeleteupdateperson
  • groups例如,添加一个检查约束check (num_persons <= 4)

推荐阅读