当前位置: 首页 > 面试题库 >

Oracle Database Enforce CHECK在多个表上

欧阳哲
2023-03-14
问题内容

我正在尝试在多个表的ORACLE数据库中强制执行CHECK约束

CREATE TABLE RollingStocks ( 
  Id NUMBER,
  Name Varchar2(80) NOT NULL,           
  RollingStockCategoryId NUMBER NOT NULL,            
  CONSTRAINT Pk_RollingStocks Primary Key (Id),
  CONSTRAINT Check_RollingStocks_CategoryId  
  CHECK ((RollingStockCategoryId  IN (SELECT Id FROM FreightWagonTypes)) 
        OR 
        (RollingStockCategoryId  IN (SELECT Id FROM LocomotiveClasses)))       
);

…但出现以下错误:

原因:语句中的此处不允许子查询。操作:从语句中删除子查询。

您能帮助我了解问题所在或如何获得相同的结果吗?


问题答案:

在Oracle中,检查约束非常有限。要像您建议的那样进行检查,您必须实现PL / SQL触发器。

我的建议是完全避免触发。实现一个存储过程,该过程可以修改数据库并包括检查。尽管存储过程难以实现,但存储过程更易于维护。但是从长远来看,将前端从直接表访问更改为存储过程访问会获得很多回报。



 类似资料:
  • 我需要在我的数据库中创建多个多对多的关系。 有一个“主”表,我们称之为“项目”。 然后有3个表包含“选项”。 假设我们有:品类、地域、用户。这些保存的唯一信息是项目的名称和ID。 可以将多个类别、区域和用户分配给多个项目。 因此,我有两个选项来创建这种关系: 1)为每个'选项'表创建关系表。每个表包含两列:project_id和category_id、region_id或user_id。使用这种方

  • 嗨,我被困在将几个PDF表单合并在一个一个中。我已经尝试使用PDF格式执行此操作,但它无法打开只读的PDF表单。我已经用pdfsharp和他的不道德的参数进行了测试,它做了一些工作。它合并PDF但删除表单内容...(可悲的是,我已经失去了填补它的时间...) 这是我的代码的某些部分,也许它只是一个我没有想到的缺失参数...... 因此,如果有人对如何合并“修改保护”PDF表单有想法,我已准备好对其

  • null 计划:当用户购买一张票时,我将一条记录插入到适当的表中。例如,如果用户购买: Ticket#1,我将一条记录插入Table1 Ticket#2,我将一条记录插入Table1和Table2 Ticket#3,我将一条记录插入Table1和Table3 问题:如何接收不是类型为1的票证的所有数据,然后拆分参数插入到单独的表中。例如,当我试图为Table2创建触发器时,该触发器只能接收与Tab

  • 问题内容: 我有以下数据库结构/层次结构: TABLE product_type : TABLE product : parent_id :是product_type ID TABLE treeNode : 它是一个树层次结构(根有n个子节点),层次结构的数量 未知 。 col的值为 “ CATEGORY” 或 “ GROUP” ,这意味着我有2棵树: Categories: Groups: TA

  • 问题内容: 如果要在Java中将两个列表合并为一个,可以使用。但是,如果我想合并多个列表怎么办? 这有效: 但这似乎并不是最好的解决方案,阅读起来也不是特别好。可悲的是不起作用。对于我来说,多次使用并为所有条目重复创建自己的列表似乎也不理想。那我该怎么办呢? 问题答案: 借助下面的代码中所示的Stream API, Java 8可以轻松实现这一目标。我们基本上已经创建了一个包含所有列表的流,然后,

  • 问题内容: 我正在尝试找出SQLAlchemy中正确的联接查询设置,但似乎无法解决。 我有以下表格设置(简化后,我省略了非必要字段): 因此,关系如下: 1:n Group Member 1:n Member Item 1:n Version Item 我想通过从数据库中选择具有特定版本的所有项目行来构建查询。然后,我想按组然后按成员订购。使用Flask / WTForm的输出应如下所示: 我想出