Триггер SQL с переменными из двух таблиц - PullRequest
0 голосов
/ 12 декабря 2011

Вот запросы для обеих таблиц:

SQL> describe order_line;
Name                                                                    Null?    Type
----------------------------------------------------------------------- -------- ------------------
O_ID                                                                    NOT NULL NUMBER(8)
INV_ID                                                                  NOT NULL NUMBER(10)
OL_QUANTITY                                                             NOT NULL NUMBER(4)

SQL> describe inventory; 

Name                                                                    Null?    Type
----------------------------------------------------------------------- -------- ------------------
INV_ID                                                                  NOT NULL NUMBER(10)
ITEM_ID                                                                          NUMBER(8)
COLOR                                                                            VARCHAR2(20)
INV_SIZE                                                                         VARCHAR2(10)
INV_PRICE                                                                        NUMBER(6,2)
INV_QOH                                                                          NUMBER(4)

Я пытаюсь заставить срабатывать триггер при удалении строки в order_line, если соответствующий inv_qoh в инвентаре меньше 100. Вот мой код:

create or replace trigger ol_bef_del
before delete on order_line for each row
declare
    inv_inv_id number;
    inv_inv_qoh number;
    little_inv_error exception;
begin
    select inv_id, inv_qoh into inv_inv_id, inv_inv_qoh from inventory
    where inv_inv_id = inv_id;
if inv_inv_qoh < 100
raise little_inv_error;
end if;
exception
when little_inv_error then
    raise_application_error (-20002,
    'Wait a minute - too little in Inventory');
end;
/

Что я делаю не так?

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 12 декабря 2011

Вам нужно использовать: OLD для доступа к значениям удаляемой строки следующим образом:

select inv_id, inv_qoh into inv_inv_id, inv_inv_qoh from inventory
where inv_inv_id = :old.inv_id;
--                 ^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...