小编典典

Oracle Database Enforce CHECK在多个表上

sql

我正在尝试在多个表的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)))       
);

…但出现以下错误:

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

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


阅读 173

收藏
2021-04-22

共1个答案

小编典典

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

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

2021-04-22