Oracle数据库强制检查多个表

Gig*_*aPr 6 sql oracle

我试图在多个表的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)))       
);
Run Code Online (Sandbox Code Playgroud)

...但我收到以下错误:

*原因:声明中不允许使用子查询.*操作:从语句中删除子查询.

你能帮我理解问题是什么或者如何达到同样的结果吗?

And*_*mar 2

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

我的建议是完全避免触发因素。实现一个修改数据库并包含检查的存储过程。存储过程更容易维护,但实现起来稍微困难一些。但从长远来看,将前端从直接表访问更改为存储过程访问会带来很多回报。