我有这种继承类型结构:
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:错误的绑定变量'NEW.INTERES'
我怎样才能做到这一点?
我已经尝试过了:
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
。