Я определил этот триггер для управления ссылками среди объектов после удаления, чтобы в схеме не оставалось «висячих ссылок»:
CREATE TRIGGER gestionRefTransferencia
BEFORE DELETE ON Corriente
REFERENCING OLD AS O
FOR EACH ROW MODE DB2SQL
BEGIN
UPDATE Transferencia SET Cuenta_receptora = NULL WHERE Cuenta_receptora = O.oid;
END@
Но db2 возвращает следующую ошибку:
«Типы данных операндов для операции» = «несовместимы или сопоставимы»
Есть идеи, почему? Нельзя сравнивать типы данных ref?
Вот моя схема:
CREATE TYPE Cuenta_udt AS (
IBAN VARCHAR(28),
Saldo REAL,
Numero_de_cuenta BIGINT,
Fecha_creacion DATE
) mode DB2SQL;
CREATE TYPE Operacion_udt AS (
Cod_Num INTEGER,
Descripcion VARCHAR(100),
Hora INTEGER,
Fecha DATE,
Cantidad REAL,
Cuenta_IBAN VARCHAR(28)
) mode DB2SQL;
CREATE TYPE De_ahorro_udt UNDER Cuenta_udt AS (
Interes REAL,
Ultimo_devengo INTEGER
) mode DB2SQL;
CREATE TYPE Corriente_udt UNDER Cuenta_udt AS (
Oficina_bancaria_Codigo INTEGER,
Oficina_bancaria_Direccion VARCHAR(100)
) mode DB2SQL;
CREATE TYPE Transferencia_udt UNDER Operacion_udt AS (
Cuenta_IBAN_receptora VARCHAR(28),
Cuenta_receptora REF(Cuenta_udt)
) mode DB2SQL;
CREATE TABLE Cuenta OF Cuenta_udt (
REF IS oid USER GENERATED,
IBAN WITH OPTIONS NOT NULL,
Saldo WITH OPTIONS NOT NULL,
Numero_de_cuenta WITH OPTIONS NOT NULL,
Fecha_creacion WITH OPTIONS NOT NULL,
CONSTRAINT pk_cuenta PRIMARY KEY(IBAN)
);
CREATE TABLE Operacion OF Operacion_udt (
REF IS oid USER GENERATED,
Cod_Num WITH OPTIONS NOT NULL,
Hora WITH OPTIONS NOT NULL,
Fecha WITH OPTIONS NOT NULL,
Cantidad WITH OPTIONS NOT NULL,
Cuenta_IBAN WITH OPTIONS NOT NULL,
CONSTRAINT pk_operacion PRIMARY KEY(Cod_Num),
FOREIGN KEY (Cuenta_IBAN) REFERENCES Cuenta(IBAN) ON DELETE CASCADE
);
CREATE TABLE Corriente OF Corriente_udt UNDER Cuenta INHERIT SELECT PRIVILEGES (
FOREIGN KEY (Oficina_bancaria_Codigo, Oficina_bancaria_Direccion) REFERENCES Oficina_bancaria(Codigo, Direccion) ON DELETE SET NULL
);
CREATE TABLE Transferencia OF Transferencia_udt UNDER Operacion INHERIT SELECT PRIVILEGES (
Cuenta_receptora WITH OPTIONS SCOPE Cuenta,
FOREIGN KEY (Cuenta_IBAN_receptora) REFERENCES Cuenta(IBAN) ON DELETE CASCADE
);