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