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。