我正在尝试查询一个表(wishlist_table),以查看成员在其中出现的次数。
我想要实施的商业规则是,会员在任何时候都可以在愿望清单上最多包含五个项目。
我被告知这样做是一个域约束,所以我创建了一个函数来检查一个membersId出现在wishlist表中的时间,但是在调用from my check约束时出错了
CREATE TABLE WishlistTest
(
WishlistId NUMERIC(6) NOT NULL PRIMARY KEY,
CONSTRAINT chk_Wishlist CHECK (sw3.wishListUpToFiveItems() >= 0 AND sw3.wishListUpToFiveItems() < 5)
);
CREATE OR REPLACE FUNCTION functionWishListUpToFiveItems
RETURN number IS
total number(1) := 0;
BEGIN
SELECT count(*) into total
FROM Member
WHERE MemberId = 1;
IF total < 5 THEN
return total;
ELSE RETURN -1;
END IF;
END;
如果有人能告诉我一个更好的方法来解决这个问题,或者看看我做错了什么就会很棒
答案 0 :(得分:2)
我猜你的导师想要你
对于使用触发器或物化视图的替代方法(对物化视图有约束)以及可能更多关于Oracle应如何允许某种断言语法来强制执行此类约束的讨论,您可以查看this askTom thread