2014-10-30 1 views
0

테이블 (wishlist_table)을 쿼리하여 멤버가 표시되는 횟수를 확인하려고합니다.Oracle check constraint, call function

구현하려는 비즈니스 규칙은 회원이 한 번에 최대 5 개의 항목을 가질 수 있다는 것입니다.

나는 membersId가 위시리스트 테이블에 표시 얼마나 많은 시간을 확인하는 함수를 만들었습니다 그래서 도메인 제약 조건으로이 일을 말씀 드리 지요하지만 내 점검 제한 조건에서를 호출 할 때 오류가 발생합니다

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; 

누군가가 나에게 이것에 대해가는 더 나은 방법을 말해 아니면 내가 잘못하고있는 무슨을 볼 수있는 경우가

+2

일반적으로 오류가 발생하는 경우 오류를 게시하십시오. 그렇지 않으면, 우리는 추측해야하고 우리는 잘못 추측 할 수 있습니다. 이것을 누가 제약 조건으로 이행하라고 했습니까? 숙제 나 감독관의 요청입니까? 오라클의 'CHECK' 제약 조건에서 함수를 호출 할 수 없으므로 전체 접근법이 잘못되어 제약 조건 "요구 사항"의 출처를 파악하는 것이 유용합니다. –

+0

이것은 대학 과제입니다. 검사 제약 조건에서 함수를 호출 할 수 없다면 다른 방법으로 가야합니다. 그는 도메인 제약 조건으로 누군가가 나에게 어떻게해야하는지 가르쳐 줄 수 있다고 말했다. 나는 그 코드에 대해 갈 길이 멀다. 고맙다. –

답변

2

내가 강사가 당신에게

  • 가 추가 원하는 것을 추측 할 좋은 것 n 정수 열을 사용하여 위시리스트 위치를 저장하는 테이블
  • 구성원과 희망 목록 위치의 조합이 고유하도록하는 제한 조건을 추가하십시오.
  • 위시리스트 위치를 1과 5 사이의 값으로 제한하는 제한 조건을 추가하십시오 트리거 또는 Oracle, 당신은 this askTom thread를 통해 볼 수 제약이 일종의을 적용 주장 구문의 일종을 허용하는 방법에 대해 아마 더 논의 (A 구체화 된 뷰의 제약으로) 구체화보기를 사용하여 대체 방법에 대한

.