0
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 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;
/
:
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
이 문장 SELECT DEREF(:OLD.refProducto).codigo INTO cod FROM dual;
내 제품을 반품하지 않기 때문에 문제가 있습니다 codigo
속성 내가 refProducto
을 참조하고있다.
어떻게 해결할 수 있습니까? 새로운 'Lineaventa'를 만들기에 충분한 재고가 있는지 알아야합니다.
고맙습니다.