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