【发布时间】:2020-01-16 19:29:58
【问题描述】:
这是我的代码:
create trigger TriggerAdresse1
before INSERT
on Adresse
for each row
declare
enthaelt boolean;
begin
if ((Provinz in (select Name from Provinz2)) and (Laendercode in (select Laendercode from Provinz2))) then
enthaelt := true;
end if;
if(enthaelt:=false) then
rollback;
end if;
end;
如果属性 Provinz 或 Laendercode 不在表 Provinz2 中,我将尝试取消插入。 Datagrip 说它无效...
感谢您的帮助! 最好的问候
【问题讨论】:
-
什么是
Provinz? -
Provinz 是 Adresse 的一个属性
-
“Datagrip 说它无效...”不是 PL/SQL 编译错误消息。但是 PL/SQL 中没有
if x in (select ...)语法。此外,if条件周围没有括号(虽然它们不会导致编译错误,但它们只会激怒 PL/SQL 程序员)。 -
另外,您不能在触发器中使用
rollback。这将回滚整个事务,包括在触发语句之前所做的任何未提交的更改,这是不允许的,因为它可能会导致混乱。你所能做的就是引发一个异常,这将导致插入失败并出现错误堆栈。 -
感谢您的 cmets,William!我们需要在 DataGrip 中创建一个检查:youtrack.jetbrains.com/issue/DBE-9944
标签: oracle plsql database-trigger datagrip