Oracle是否使用短路逻辑运算符?
数据库的测试副本使用以下触发器Oracle是否使用短路逻辑运算符?,oracle,Oracle,数据库的测试副本使用以下触发器 TRIGGER "BINFO_TEST"."SPK_COMPANY" before insert or update on "COMPANY" for each row begin if inserting then if :NEW."ID" is null then select SEQ_COMPANY.nextval into :NEW."ID" from dual; end if; end if; selec
TRIGGER "BINFO_TEST"."SPK_COMPANY"
before insert or update on "COMPANY"
for each row
begin
if inserting then
if :NEW."ID" is null then
select SEQ_COMPANY.nextval into :NEW."ID" from dual;
end if;
end if;
select sysdate into :NEW."DATE_CREATED" from dual;
end;
我使用实体框架,ID映射到decimal
类型,这意味着它不可为空。默认情况下,如果Iinsert将传递值0并跳过触发器。oracle触发器是否使用“短路”逻辑运算符?我是否可以使用类似的运算符
TRIGGER "BINFO_TEST"."SPK_COMPANY"
before insert or update on "COMPANY"
for each row
begin
if inserting then
if :NEW."ID" is null OR :NEW."ID" = 0 then
select SEQ_COMPANY.nextval into :NEW."ID" from dual;
end if;
end if;
select sysdate into :NEW."DATE_CREATED" from dual;
end;
是的,PL/SQL中有短路评估: 在计算逻辑表达式时,PL/SQL使用短路计算。也就是说,PL/SQL会在确定结果后立即停止对表达式求值。这允许您编写可能导致错误的表达式
来源:是的,PL/SQL中有短路评估: 在计算逻辑表达式时,PL/SQL使用短路计算。也就是说,PL/SQL会在确定结果后立即停止对表达式求值。这允许您编写可能导致错误的表达式
来源:您可以做得稍微短一点:
begin
if inserting then
:NEW."ID" := NVL(NULLIF(:NEW."ID",0), SEQ_COMPANY.NEXTVAL);
end if;
:NEW."DATE_CREATED" := sysdate;
end;
你可以做得稍微短一点:
begin
if inserting then
:NEW."ID" := NVL(NULLIF(:NEW."ID",0), SEQ_COMPANY.NEXTVAL);
end if;
:NEW."DATE_CREATED" := sysdate;
end;
不是重复的,但您正在使用来填充您的ID,这将在将来给您带来问题。此外,如果您使用的是11g或更高版本,则无需选择双通道,只需直接分配即可。无论您使用什么,您都可以直接分配sysdate。不是重复的,但您使用来填充您的ID,这将在将来给您带来问题。此外,如果您使用的是11g或更高版本,则无需选择双通道,只需直接分配即可。无论您使用什么,都可以直接分配sysdate。