Триггер на представление ORACLE DB

Делаю БД с таблицами "Товары" и "Группы товаров", хочу сделать instead триггеры для представления. Но не знаю, как получить введенные в представление данные. Через NEW и OLD не получается. Как можно по-другому?

 CREATE OR REPLACE FORCE NONEDITIONABLE VIEW "USER1"."PRODUCTS_VIEW" ("Product_name", "Group_name", "Entry_price", "Product_count") AS 
  SELECT
  p.NAME AS "Product_name",
  pg.NAME AS "Group_name",
  p.ENTRY_PRICE AS "Entry_price",
  p.COUNT AS "Product_count"
FROM
  PRODUCT p
JOIN
  PRODUCT_GROUP pg ON p.GROUP_ID = pg.ID;

Триггер:

   create or replace NONEDITIONABLE TRIGGER "USER1"."INSTEAD_OF_INSERT_PRODUCTS_VIEW"
    INSTEAD OF INSERT ON PRODUCTS_VIEW
    FOR EACH ROW
BEGIN
  -- Вставляем данные в таблицу "PRODUCT" без дополнительных вычислений
  INSERT INTO "USER1"."PRODUCT" (NAME, GROUP_ID, ENTRY_PRICE, COUNT)
  VALUES (:NEW.Product_name, :NEW.Group_name, :NEW.Entry_price, :NEW.Product_count);
END;

Полный код:

CREATE TABLE "USER1"."PRODUCT" 
   (    "ID" NUMBER(*,0) DEFAULT "USER1"."PRODUCT_SEQUENCE"."NEXTVAL" NOT NULL ENABLE, 
    "NAME" VARCHAR2(80 BYTE) NOT NULL ENABLE, 
    "GROUP_ID" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, 
    "ENTRY_PRICE" NUMBER DEFAULT 0, 
    "RETAIL_PRICE" NUMBER DEFAULT 0, 
    "COUNT" NUMBER(*,0) DEFAULT 0 NOT NULL ENABLE, 
     CONSTRAINT "PRODUCT_PK" PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE, 
     CONSTRAINT "PRODUCT_FK1" FOREIGN KEY ("GROUP_ID")
      REFERENCES "USER1"."PRODUCT_GROUP" ("ID") ON DELETE CASCADE ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;

  CREATE OR REPLACE NONEDITIONABLE TRIGGER "USER1"."UPDATE_GROUP_C_RETAIL" 
  BEFORE UPDATE OF entry_price ON product
  FOR EACH ROW
BEGIN
    UPDATE product_group
    SET c_retail = c_retail - (:OLD.retail_price * :OLD.count) + (:NEW.retail_price * :NEW.count)
    WHERE id = :NEW.group_id;
END;
/
ALTER TRIGGER "USER1"."UPDATE_GROUP_C_RETAIL" ENABLE;

Ответы (1 шт):

Автор решения: ESkri

Убери for each row
Документация говорит, что

An INSTEAD OF trigger is always a row-level trigger.

→ Ссылка