【发布时间】:2019-10-17 16:41:14
【问题描述】:
我正在为一个触发器工作,该触发器使用函数在名为 Partecipa 的表中为列 Molteplicità 提供“域”。
我创建的触发器如下:
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à”期间出错
(请注意,如果我禁用了我的触发器,则插入语句可以正常工作。触发器有问题,但我找不到错误。)
【问题讨论】:
-
看起来您的问题是为什么
'*..*'与您的正则表达式' [*]\..[*] '不匹配。是空间。 -
有些鬼鬼祟祟。
*..*应该被正则表达式接受,正如link 所说
标签: regex oracle plsql database-trigger