2013-04-27 2 views
0

Мне нужно создать триггер, который устанавливает флаг, когда количество продукта, на руке падает ниже 5.Oracle 11g триггер, который устанавливает флаг, когда число ниже х

Я создал таблицу «STP_STOCK» в Oracle 11g и он имеет следующую колонку:

STP_QUANTITY, NUMBER(4,0), RANGE 0-9999 

Как создать триггер, который устанавливает флаг в SQL?

У меня есть следующее: но не знаю, как установить флаг.

CREATE OR REPLACE TRIGGER STP_STOCK 
AFTER UPDATE 
    ON orders 
    FOR STP_QUANTITY 

BEGIN 

END; 
+1

Где этот «флаг» вы хотите установить ? –

+0

Является ли «флаг», который вы пытаетесь установить столбец в таблице «STP_STOCK»? Или столбец в другой таблице? Или что-то другое? Вы говорите, что у вас есть таблица 'STP_STOCK'. Но затем вы пытаетесь создать триггер с именем 'STP_STOCK'. И вы пытаетесь определить триггер на таблице «ORDERS». –

+0

Спасибо за помощь ребятам. – SJSL

ответ

0

Предполагая, что флаг находится в той же таблице, я хотел бы предложить вам использовать перед обновление триггера. Затем вы можете сделать что-то вроде:

CREATE OR REPLACE TRIGGER STP_STOCK 
before UPDATE 
    ON orders 
    FOR each row  
BEGIN 
    if :new.stp_quantity < 5 
    then :new.flag := 'Y'; 
    end if; 
END; 

(я не имею Oracle под рукой, чтобы проверить синтаксис, так что синтаксис может иметь ошибку.)

Вы хотите сделать before курок, так вы можете просто установить значение в :new. Плохая практика - обновить ту же таблицу в триггере after.

Предположительно, вы также хотите проверить, превышает ли количество 5 и установить флаг на 'N', но это не указано в вопросе.

И, наконец, вместо триггера и флага вы, вероятно, действительно хотите сделать это с помощью view или виртуального столбца. Что-то вроде:

select o.*, (case when stp_quantity < 5 then 'Y' else 'N' end) as Flag 
from orders o 

(Примечание: Я использую * для удобства на практике, вы хотите перечислить каждый столбец в представлении.).

+0

Легендарный - отличный ответ, спасибо Гордон! – SJSL

Смежные вопросы