我有这个继承类型结构:
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'
”
答案 0 :(得分:1)
以评论开头,但由于格式问题而移至答案。
Interes
仅在De_ahorro_udt
中可用,而在Cuenta_udt
中不可用。
因此,当您引用Cuenta_udt
对象时,就无法访问该属性-这就是错误的根本原因。
您可以尝试投射(:new as De_ahorro_udt).Interes
,看看会发生什么,或使用IS OF
。