我试图在多个表的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)
...但我收到以下错误:
*原因:声明中不允许使用子查询.*操作:从语句中删除子查询.
你能帮我理解问题是什么或者如何达到同样的结果吗?
Oracle 中的检查约束非常有限。要像您建议的那样进行检查,您必须实现PL/SQL 触发器。
我的建议是完全避免触发因素。实现一个修改数据库并包含检查的存储过程。存储过程更容易维护,但实现起来稍微困难一些。但从长远来看,将前端从直接表访问更改为存储过程访问会带来很多回报。
| 归档时间: |
|
| 查看次数: |
4862 次 |
| 最近记录: |