Oracle检查约束,调用函数

时间:2014-10-30 19:07:20

标签: sql oracle function

我正在尝试查询一个表(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;

如果有人能告诉我一个更好的方法来解决这个问题,或者看看我做错了什么就会很棒

1 个答案:

答案 0 :(得分:2)

我猜你的导师想要你

  • 向表中添加一个整数列以存储愿望清单位置
  • 添加一个约束,确保成员和愿望清单位置的组合是唯一的
  • 添加一个约束,将愿望清单位置限制为1到5之间的值

对于使用触发器或物化视图的替代方法(对物化视图有约束)以及可能更多关于Oracle应如何允许某种断言语法​​来强制执行此类约束的讨论,您可以查看this askTom thread