Sql Oracle检查约束,调用函数

Sql Oracle检查约束,调用函数,sql,oracle,function,Sql,Oracle,Function,我试图查询一个表(wishlist_表),以查看一个成员在其中出现了多少次 我试图实现的业务规则是,一个成员在任何时候最多可以有五个愿望列表项 我被告知要作为域约束执行此操作,因此我创建了一个函数来检查membersId在wishlist表中出现的次数,但从我的检查约束调用时出错 CREATE TABLE WishlistTest ( WishlistId NUMERIC(6) NOT NULL PRIMARY KEY, CONSTRAINT chk_Wishlist CHECK (sw3.wi

我试图查询一个表(wishlist_表),以查看一个成员在其中出现了多少次

我试图实现的业务规则是,一个成员在任何时候最多可以有五个愿望列表项

我被告知要作为域约束执行此操作,因此我创建了一个函数来检查membersId在wishlist表中出现的次数,但从我的检查约束调用时出错

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;
CREATE TABLE WishlistTest
(
WishlistId数字(6)非空主键,
约束chk_Wishlist检查(sw3.wishListUpToFiveItems()>=0和sw3.wishListUpToFiveItems()<5)
);
创建或替换函数functionWishListUpToFiveItems
返回号码是
总数(1):=0;
开始
选择count(*)计入总计
来自成员
其中MemberId=1;
如果总数小于5,则
返回总数;
否则返回-1;
如果结束;
结束;

如果有人能告诉我一个更好的方法,或者看到我做错了什么,那就太好了

我想你的导师希望你这么做

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

对于使用触发器或物化视图(在物化视图上有一个约束)的替代方法,以及关于Oracle应该如何允许某种断言语法来实施这种约束的更多讨论,您可以仔细查看。

通常,如果您遇到错误,请发布错误。否则,我们必须猜测,我们可能猜错了。谁让你把它作为一个约束来实现的?这是作业还是主管的要求?在Oracle中,由于无法从
检查
约束调用函数,因此整个方法可能是错误的,这就是为什么知道约束“需求”来自何处很有用的原因。这是一项大学作业,如果我无法从检查约束调用函数,我将不得不以其他方式进行。他说,这可以作为一个领域的限制,任何人都可以告诉我如何去做。我可不想让密码出问题谢谢