sql >> Databasteknik >  >> RDS >> Oracle

PL/SQL SQL*Plus-sats ignoreras

Frågan har ingenting med triggers att göra. Du har helt enkelt ett syntaxfel på följande rad:

IF :NEW.EVENT_ID AND :NEW.DESCRIPTION IS NOT NULL THEN

if uttalande och logiska operatorer förväntar sig ett booleskt uttryck. PL/SQL har inte implicita datatypkonverteringar till booleska värden.

Detta betyder :NEW.EVENT_ID är inte ett giltigt booleskt uttryck så det kan inte användas med and -operator och därför misslyckas kompileringen med:

PLS-00382: expression is of wrong type

I huvudsak kan ditt problem begränsas till följande exempel:

declare
  v_foo number;
begin
  -- compilation fails because a number (or any other non-boolean
  -- data type) is not a boolean expression.
  if v_foo
  then
    null;
  end if;
end;
/

Arbetsexempel (kompilerar bra):

declare
  v_foo number;
  function to_boolean(p_x in number) return boolean is
  begin
    return p_x > 0;
  end;
begin
  -- a function returns a boolean value
  if to_boolean(v_foo)
  then
    null;
  end if;

  -- a > operator returns a boolean value
  if v_foo > 0
  then
    null;
  end if;

  -- is null operator returns a boolean value
  if v_foo is null
  then
    null;
  end if;
end;
/


  1. Introduktion till auto_explain:Hur man loggar långsamma Postgres-frågeplaner automatiskt

  2. En snabb titt på SQL Servers numeriska funktioner

  3. pgbouncer - stängs eftersom:oren server på varje anslutning

  4. libpqxx v12 - binder dynamiskt vektorvärden till förberedd sats (alternativ till anrop)