我有这个继承类型结构:
CREATE OR REPLACE TYPE Cuenta_udt AS OBJECT (
IBAN VARCHAR(28),
Saldo FLOAT,
Numero_de_cuenta NUMBER,
Fecha_creacion DATE,
Clientes clientes_array) NOT INSTANTIABLE NOT FINAL;
/
CREATE OR REPLACE TYPE De_ahorro_udt UNDER Cuenta_udt (
Interes FLOAT,
Ultimo_devengo NUMBER ) FINAL;
/
CREATE OR REPLACE TYPE Corriente_udt UNDER Cuenta_udt (
Oficina_bancaria_Codigo NUMBER,
Oficina_bancaria_Direccion VARCHAR(100),
Oficina_bancaria REF Oficina_bancaria_udt ) FINAL;
/
它变成这个表:
CREATE TABLE Cuenta OF Cuenta_udt (
IBAN PRIMARY KEY,
Saldo NOT NULL,
Numero_de_cuenta NOT NULL,
Fecha_creacion NOT NULL
) OBJECT IDENTIFIER IS SYSTEM GENERATED;
现在,我想定义一个触发器,它根据特定的数据类型(De_ahorro或Corriente(执行一些操作或其他一些操作。我已经试过了,但不起作用:
CREATE OR REPLACE TRIGGER actualizarSaldo
BEFORE INSERT ON Cuenta
FOR EACH ROW
BEGIN
IF :NEW.Interes IS NOT NULL THEN
RAISE_APPLICATION_ERROR(-20000, 'Soy de ahorro');
ELSE
RAISE_APPLICATION_ERROR(-20001, 'Soy corriente');
END IF;
END;
/
错误是:
PLS-00049:错误的绑定变量"新。因特莱斯'
我怎样才能实现呢?
我已经尝试过这个:
CREATE OR REPLACE TRIGGER actualizarSaldo
BEFORE INSERT ON Cuenta
FOR EACH ROW
BEGIN
IF :NEW IS OF (De_ahorro_udt) THEN
RAISE_APPLICATION_ERROR(-20000, 'Soy de ahorro');
ELSE
RAISE_APPLICATION_ERROR(-20001, 'Soy corriente');
END IF;
END;
/
但是我收到此错误:"PLS-00049: bad bind variable 'NEW'
">
开始作为注释,但由于格式问题移至答案。
Interes
仅在De_ahorro_udt
中可用,在Cuenta_udt
上不可用。因此,当您引用Cuenta_udt
对象时,您无法访问该属性 - 这是错误的根本原因。
您可以尝试投(:new as De_ahorro_udt).Interes
,看看会发生什么或使用IS OF
。
其他材料