У меня проблема с triggers
. Прежде всего, у меня есть это:Как использовать ссылку в триггере?
Типы:
CREATE OR REPLACE TYPE Tipo_Lineaventa AS OBJECT
(id NUMBER(5),
cantidad NUMBER(5),
precio_venta NUMBER(5,2),
refProducto REF Tipo_Producto);
/
CREATE OR REPLACE TYPE Tipo_Producto AS OBJECT
(codigo NUMBER(5),
modelo VARCHAR(15),
precio NUMBER(5,2),
stock_disp NUMBER(3),
esSuministrado Tipo_esSuministrado
) NOT FINAL;
/
и столы:
CREATE TABLE Tabla_Lineaventa OF Tipo_Lineaventa
(CONSTRAINT PK_Tabla_Lineaventa PRIMARY KEY (id),
refProducto NOT NULL);
CREATE TABLE Tabla_Producto OF Tipo_Producto
(CONSTRAINT PK_Tabla_Producto PRIMARY KEY (codigo),
CONSTRAINT AK_Tabla_Producto UNIQUE(modelo))
NESTED TABLE esSuministrado STORE AS NT_esSuministrado;
А теперь у меня есть этот trigger
:
CREATE OR REPLACE TRIGGER checkQuantity
BEFORE INSERT ON Tabla_Lineaventa
FOR EACH ROW
DECLARE
stock Tabla_Producto.stock_disp%TYPE;
cod Tabla_Producto.codigo%TYPE;
aux Tipo_Producto;
BEGIN
SELECT DEREF(:OLD.refProducto).codigo INTO cod FROM dual;
SELECT stock_disp INTO stock FROM Tabla_Producto P WHERE P.codigo = cod;
IF stock > :OLD.cantidad THEN
DBMS_OUTPUT.PUT_LINE('OK')
ELSE
DBMS_OUTPUT.PUT_LINE('ERROR');
END IF;
END checkQuantity;
/
С предложение SELECT DEREF(:OLD.refProducto).codigo INTO cod FROM dual;
У меня проблема, потому что не вернуть мой продукт codigo
атрибут что я ссылаюсь на refProducto
.
Как его решить? Мне нужно знать, есть ли у меня достаточный запас для нового «Lineaventa».
Большое спасибо!