2012-07-04 2 views
1

이 제한 조건에 필요한 트리거 유형이 고정되어 있습니다.sql 트리거 값에서 x를 설정해야합니다.

가격 및 수수료를드립니다. 가격은 수수료 금액을 결정합니다. < 100 - 4 %, < 200 - 5 % 등

제 생각입니다. 데이터베이스는 4 개의 가격 값 (101, 201, 401, 601)을 보유 할 별도의 테이블을 포함하고 있습니다.이 테이블은 자체적으로 일치하는 위임 %와 함께 PC라고합니다. 부동산 목록을 만들 때 입력 한 가격에 따라 얻는 수수료를 계산하고 싶습니다.

삽입시 new.price를 확인하고 PC의 가격과 비교해야합니다. new.price는 가격 튜플 이하가되면, 나는이 같은 계산 기능을 사용하는 것이 좋습니다 다음 트리거를 호출 것이라고위원회 값

create or replace TRIGGER findCommission BEFORE INSERT OR UPDATE ON HASLISTING 
FOR each ROW 
BEGIN 
IF (:NEW.ASKING_PRICE < 100001) THEN 
:NEW.COMMISSION = 6.0; 
END IF; 
IF (:NEW.ASKING_PRICE < 250001) THEN 
:NEW.COMMISSION = 5.5; 
END IF; 
IF (:NEW.ASKING_PRICE < 1000001) THEN 
:NEW.COMMISSION = 5.0; 
END IF; 
IF (:NEW.ASKING_PRICE > 1000000) THEN 
:NEW.COMMISSION = 4.0; 
END IF; 
END; 
+0

상태 (예 : Postgresql, MySQL, Sql Server 등). 모든 RDBMS에는 다른 트리거 구문과 메커니즘이 있습니다. –

+0

Oracle Application Express를 사용하고 있습니다. – George

답변

3

에 가격을 설정합니다. 그렇게하면 커미션 로직은 별도로 유지되며 변경 될 수 있습니다.

또한 커미션 표 설명이 도움이 될 수 있습니다.

create table price_comm(
    max_price number(20), 
    comm number(5,2) 
); 


insert into price_comm (max_price, comm) values (10000, 2.0); 
insert into price_comm (max_price, comm) values (20000, 3.0); 
insert into price_comm (max_price, comm) values (30000, 4.0); 
commit; 

create or replace function f_get_comm_percent(
    i_price in number 
) return number 
as 
o_comm_percent price_comm.comm%type; 
begin 
    select comm 
    into o_comm_percent 
    from (
     select comm, 
      rank() over (order by max_price desc) rnk 
     from price_comm 
     where max_price <= i_price 
) where rnk = 1;  

    return o_comm_percent; 

end; 
/

또한 범위가 중복되지 않고 그들이 할 경우, 그들은 최대 commision 얻을 수 있다고 가정한다 --This) 이제

위원회 값을 얻기를 ...

SQL> select f_get_comm_percent(12000) from dual; 

F_GET_COMM_PERCENT(12000) 
------------------------- 
         2 

SQL> select f_get_comm_percent(45000) from dual; 

F_GET_COMM_PERCENT(45000) 
------------------------- 
         4 

- 트리거 정의는 이와 같이 간단 할 수 있습니다. 귀하의 질문을 보면, 당신은 테이블에있는 비율을 가지고있는 것 같으며 최종 테이블에 커미션 값이 필요합니다.

구문 오류에 대한 트리거 코드를 테스트하지 않았습니다. 끝까지 테스트 해보십시오.