Sql 如何在触发器中使用引用?

Sql 如何在触发器中使用引用?,sql,database,plsql,reference,oracle9i,Sql,Database,Plsql,Reference,Oracle9i,我的触发器有问题。首先,我有以下几点: 类型: 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 VARC

我的触发器有问题。首先,我有以下几点:

类型:

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;
现在,我有了这个触发器:

在句子中选择DEREF:OLD.refProducto.codigo从dual转换为cod;我有问题,因为我没有返回我在refProducto中引用的product codigo属性

我怎样才能解决它?我需要知道我是否有足够的存货来做一个新的“Lineaventa”

非常感谢

我不确定这是否是问题所在,但至少对于触发器来说,OLD:为null。您应该使用NEW:pseudorecord来访问插入后的值

    SELECT DEREF(:OLD.refProducto).codigo INTO cod FROM dual;
--               ^^^^
--               here

...

    IF stock > :OLD.cantidad THEN
--             ^^^^
--           and here

    SELECT DEREF(:OLD.refProducto).codigo INTO cod FROM dual;
--               ^^^^
--               here

...

    IF stock > :OLD.cantidad THEN
--             ^^^^
--           and here