Я работаю над триггером, который предоставляет «домен» для столбца Molteplicità
в таблице с именем Partecipa
с использованием функции.
Триггер, который я создал, выглядит следующим образом:
CREATE OR REPLACE TRIGGER dominioMolteplicità
BEFORE INSERT OR UPDATE ON partecipa
FOR EACH ROW
BEGIN
IF moltepl_valido(:NEW.molteplicità) = 'f' THEN
RAISE_APPLICAZION_ERROR(-20002, 'Invalid type');
END IF;
END;
, которая использует следующую функцию:
CREATE OR REPLACE FUNCTION motepl_valido(mol VARCHAR2) RETURN CHAR IS
BEGIN
IF regexp_like(LOWER(mol), ' [*]\..[*] ') THEN
RETURN 't';
ELSE
RETURN 'f';
END IF;
END;
Таблица Partecipa
имеет следующие столбцы:
CodP INT,
molteplicità VARCHAR2,
codAss INT,
className VARCHAR2,
PRIMARY KEY (codP),
FOREIGN KEY (className) REFERENCES class(name),
FOREIGN KEY (codAss) REFERENCES associazione(cod)`
, и хотя в моей таблице Associazione
есть строки (в частности, codaAss: 42), а в моей таблице Class
есть строки (в частности, className: 'Impiegato')
Когда я выполняю следующую инструкцию
insert into Partecipa(molteplicità, className, codAss)
values ('*..*', 'Impiegato', 42);
Я получаю эти ошибки:
ORA-20002 НЕВЕРНЫЙ ТИП
ORA-06512: AT "dominioMolteplicità", строка 3
ORA-04088: ОШИБКА ПРИ ИСПОЛНЕНИИ ТРИГГЕРА "dominioMolteplicità"
(Обратите внимание, что если я отключу свой триггер, оператор вставки будет работать правильно. Есть некоторая проблема с триггером, но я не могу найти ошибку.)