2013-08-20 3 views
0

У меня есть таблица Inventoryсложения и вычитания столбцов в оракула

"INVENTORY_CODE" VARCHAR2(20) NOT NULL ENABLE 
"ITEM_CODE"  VARCHAR2(20) NOT NULL ENABLE 
"WAREHOUSE_CODE" VARCHAR2(20) 
"CON_TON"  NUMBER(38,5) 
"IN_Q_TON"  NUMBER(38,5) 
"OR_Q_TON"  NUMBER(38,5) 
"RES_TON"  NUMBER(38,5) 
"RET_TON"  NUMBER(38,5) 
"ST_INV"   NUMBER(38,5) 

и другая таблица Inventory_warehouse

"CODE" VARCHAR2(20) NOT NULL ENABLE 
"ITEM_CODE" VARCHAR2(20) NOT NULL ENABLE 
"QUANTITY_AV_TON" NUMBER(38,5) 
"QUANTITY_AV_REAM" NUMBER(38,5) 
"QUANTITY_AV_SHEET" NUMBER(38,5) 

Я хочу сделать триггер для расчета QUANTITY_AV_TON

в

QUANTITY_AV_TON = IN_Q_TON + RES_TON + RET_TON + ST_INV - CON_TON - OR_Q_TON 

Я создал этот триггер, но это не сработало

create or replace trigger QUANTITY_TON 
AFTER insert or update or delete on INVENTORY 
for each row 
begin 
    UPDATE INVENTORY_WAREHOUSE 
    SET QUANTITY_AV_TON = 
     select (IN_Q_TON + RES_TON + RET_TON + ST_INV - CON_TON -OR_Q_TON) 
     from inventory 
     where INVENTORY.item_code = INVENTORY_WAREHOUSE.item_code; 
end; 

значения IN_Q_TON, RES_TON, RET_TON, ST_INV, CON_TON, OR_Q_TON вычисляются из других таблиц с использованием триггеров

+1

Я бы порекомендовал вам быстрый просмотр с обновленной структурой. – haki

+0

Итак, что не получилось? – OldProgrammer

+0

PL/SQL: ORA-00936: отсутствует выражениеCompilation failed, PL/SQL: заявление SQL игнорируется – user2648669

ответ

0

Если вы хотите выполнить вычисление из значений контекста строки в обрабатываемом триггере. Обычно это делается с помощью переменной «: NEW». Я отредактировал триггер, но не могу его запустить, поэтому, пожалуйста, попробуйте. Пожалуйста, прочитайте Oracle Trigger Docs

CREATE OR REPLACE TRIGGER QUANTITY_TON 
    AFTER INSERT OR UPDATE OR DELETE 
    ON INVENTORY 
    FOR EACH ROW 
BEGIN 
    UPDATE INVENTORY_WAREHOUSE 
     SET QUANTITY_AV_TON = :new.IN_Q_TON 
          + :new.RES_TON 
          + :new.RET_TON 
          + :new.ST_INV 
          - :new.CON_TON 
          - :new.OR_Q_TON 
    WHERE INVENTORY_WAREHOUSE.ITEM_CODE = :new.ITEM_CODE; 

END; 
+2

Вам нужны отдельные вычисления для вставки, обновления и удаления, хотя бы для принятия: старых значений - которые не будут существовать для вставки и будут существовать только для удаления - во внимание? –

+0

Правда, я думал только о вставке. – OldProgrammer

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