디비 이제 시작하는 초짜입니다..ㅜㅜ공부 중인데요..
create or replace
trigger setorderlineprice before insert on order_line
for each row
declare
i_productnumber int := :new.productnumber;
i_count int := :new.numberofproduct;
i_price int;
i_ordernumber int := :new.ordernumber;
i_customerid varchar(12) := 'S9';
i_workerid varchar(10);
row_count int := 0;
begin
select productprice into i_price
from product
where productnumber = i_productnumber;
:new.price := i_price * i_count;
select count(*) into row_count
from purchase_order
where purchase_order.ordernumber = i_ordernumber;
if row_count = 0 then
select workerid into i_workerid
from employee
where employee.departmentname = '주문';
insert into purchase_order(ordernumber, orderdate, customerid, workerid, totalprice)
values(i_ordernumber, sysdate, i_customerid, i_workerid, :new.price);
else
update purchase_order
set totalprice = (totalprice + i_price)
where purchase_order.ordernumber = i_ordernumber;
end if;
end;
위 코드는 order_line 테이블에 행 한줄 삽입하기 전에 price 값을 product 테이블의 productnumber에 해당하는 가격을 가지고 와서 numberofproduct랑 곱해줘서 그 값을 price에 넣어주고
purchase_order테이블에 현재 삽입을 시도하는 ordernumber랑 같은행이 있는지 알아보고 같은놈이 없으면 purchase_order 테이블에 행은 한줄 삽입해주고 같은 ordernumber를 가진 행이 있으면 purchase_order 테이블의 totalprice속성의 값을 update해주는 before insert 트리거인데
오류가 나네요ㅣㅣ..ㅠㅠ
아래는 시퀄문과 오류보고 인데 뭐가 잘못되엇나요..ㅜㅜ
명령의 1 행에서 시작하는 중 오류 발생:
declare
i_ordernumber int := purchase_order_seq.NEXTVAL;
begin
insert into order_line(ordernumber, orderlinenumber, productnumber, price, numberofproduct)
values(i_ordernumber, 1, 1221000001, 0, 3);
end;
오류 보고:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at "HR.SETORDERLINEPRICE", line 25
ORA-04088: error during execution of trigger 'HR.SETORDERLINEPRICE'
ORA-06512: at line 7
01422. 00000 - "exact fetch returns more than requested number of rows"
*Cause: The number specified in exact fetch is less than the rows returned.
*Action: Rewrite the query or change number of rows requested
그리고 현재 purchase_order테이블에 한 행도 없는 상태인데 왜 더 많은 요청이 넘어왔는지 이해가 안되네요..ㅜㅜ