Question

I'm getting the below error when trying to compile this trigger. The column "POD" is in my OEF_ITV_NDN table, but I haven't worked with triggers much to know why it is saying it is an invalid identifier.

Compilation failed, line 77 (09:19:41) The line numbers associated with compilation errors are .relative to the first BEGIN statement. This only affects the compilation of database triggers. PL/SQL: ORA-00904: "POD": invalid identifierCompilation failed, line 5 (09:19:41) The line numbers associated with compilation errors are relative to the first BEGIN statement. This only affects the compilation of database triggers. PL/SQL: SQL Statement ignored

create or replace TRIGGER "OEF_ITV_NDN_TRU" BEFORE  
  UPDATE ON OEF_ITV_NDN FOR EACH ROW  
BEGIN  
  :NEW.UPDATED_DATE := SYSDATE;  
  :NEW.UPDATED_BY := NVL(V('P1_USER_ID'),USER);
  BEGIN   
    SELECT  
    DECODE(:OLD.CHY_ATD_DATE, :NEW.CHY_ATD_DATE, DECODE( <br>
            :OLD.CHY_ETD_DATE, :NEW.CHY_ETD_DATE, DECODE(<br>
            :OLD.CHY_ATA_DATE, :NEW.CHY_ATA_DATE, DECODE(<br>
            :OLD.CHY_ETA_DATE, :NEW.CHY_ETA_DATE, DECODE(<br>
            :OLD.DLVRY_ATA_DATE, :NEW.DLVRY_ATA_DATE, DECODE(<br>
            :OLD.DLVRY_ETA_DATE,:NEW.DLVRY_ETA_DATE,DECODE(<br>
            :OLD.AVAIL_FOR_DLVRY_DATE,:NEW.AVAIL_FOR_DLVRY_DATE,DECODE(<br>
            :OLD.HAIRATON_ATD_DATE, :NEW.HAIRATON_ATD_DATE, DECODE(<br>
            :OLD.HAIRATON_ETD_DATE, :NEW.HAIRATON_ETD_DATE, DECODE(<br>
            :OLD.HAIRATON_ATA_DATE, :NEW.HAIRATON_ATA_DATE, DECODE(<br>
            :OLD.HAIRATON_ETA_DATE, :NEW.HAIRATON_ETA_DATE, DECODE(<br>
            :OLD.TERMEZ_ATA_DATE, :NEW.TERMEZ_ATA_DATE, DECODE(<br>
            :OLD.TERMEZ_ETA_DATE, :NEW.TERMEZ_ETA_DATE, DECODE(<br>
            :OLD.UZ_BORDER_ATA_DATE, :NEW.UZ_BORDER_ATA_DATE, DECODE(<br>
            :OLD.UZ_BORDER_ETA_DATE, :NEW.UZ_BORDER_ETA_DATE, DECODE(<br>
            :OLD.SHER_KHAN_ATD_DATE, :NEW.SHER_KHAN_ATD_DATE, DECODE(<br>
            :OLD.SHER_KHAN_ETD_DATE, :NEW.SHER_KHAN_ETD_DATE, DECODE(<br>
            :OLD.SHER_KHAN_ATA_DATE, :NEW.SHER_KHAN_ATA_DATE, DECODE(<br>
            :OLD.SHER_KHAN_ETA_DATE, :NEW.SHER_KHAN_ETA_DATE, DECODE(<br>
            :OLD.TJ_BORDER_ATA_DATE, :NEW.TJ_BORDER_ATA_DATE, DECODE(<br>
            :OLD.TJ_BORDER_ETA_DATE, :NEW.TJ_BORDER_ETA_DATE, DECODE(<br>
            :OLD.KG_BORDER_ATA_DATE, :NEW.KG_BORDER_ATA_DATE, DECODE(<br>
            :OLD.KG_BORDER_ETA_DATE, :NEW.KG_BORDER_ETA_DATE, DECODE(<br>
            :OLD.KZ_BORDER_ATA_DATE, :NEW.KZ_BORDER_ATA_DATE, DECODE(<br>
            :OLD.KZ_BORDER_ETA_DATE, :NEW.KZ_BORDER_ETA_DATE, DECODE(<br>
            :OLD.RU_BORDER_ATA_DATE, :NEW.RU_BORDER_ATA_DATE, DECODE(<br>
            :OLD.RU_BORDER_ETA_DATE, :NEW.RU_BORDER_ETA_DATE, DECODE(<br>
            :OLD.BY_BORDER_ATA_DATE, :NEW.BY_BORDER_ATA_DATE, DECODE(<br>
            :OLD.BY_BORDER_ETA_DATE, :NEW.BY_BORDER_ETA_DATE, DECODE(<br>
            :OLD.POD_OUTGATE_DATE, :NEW.POD_OUTGATE_DATE, DECODE(<br>
            :OLD.POD_ATA_DATE, :NEW.POD_ATA_DATE, DECODE(<br>
            :OLD.POD_ETA_DATE, :NEW.POD_ETA_DATE, DECODE(<br>
            :OLD.POE_ATD_DATE, :NEW.POE_ATD_DATE, DECODE(<br>
            :OLD.POE_ETD_DATE, :NEW.POE_ETD_DATE, DECODE(<br>
            :OLD.RDD, :NEW.RDD, :OLD.MAX_EVENT,'RDD'),<br>
            'ETD POE'),<br>
            'ATD POE'),<br>
            'ETA POD'),<br>
            'ATA POD'),<br>
            'Outgate JN4'),<br>
            'ETA BY Border'),<br>
            'ATA BY Border'),<br>
            'ETA RU Border'),<br>
            'ATA RU Border'),<br>
            'ETA KZ Border'),<br>
            'ATA KZ Border'),<br>
            'ETA KG Border'),<br>
            'ATA KG Border'),<br>
            'ETA TJ Border'),<br>
            'ATA TJ Border'),<br>
            'ETA Sher Khan'),<br>
            'ATA Sher Khan'),<br>
            'ETD Sher Khan'),<br>
            'ATD Sher Khan'),<br>
            'ETA UZ Border'),<br>
            'ATA UZ Border'),<br>
            'ETA Termez UZ'),<br>
            'ATA Termez UZ'),<br>
            'ETA Hairaton AF'),<br>
            'ATA Hairaton AF'),<br>
            'ETD Hairaton AF'),<br>
            'ATD Hairaton AF'),<br>
            'Avail For Dlvry at FOB'),<br>
            'ETA Delivery'),<br>
            'ATA Delivery'),<br>
            'ETA CHY'),<br>
            'ATA CHY'),<br>
            'ETD CHY'),<br>
            'ATD CHY')<br>
    INTO :NEW.MAX_EVENT  
    FROM DUAL<br>
    WHERE OEF_ITV_NDN.POD = 'JN4';

    EXCEPTION WHEN OTHERS THEN  
    :NEW.MAX_EVENT := 'ERRORED';  
  END;  
END;

Thanks,
Steven

Was it helpful?

Solution

The error appears to be that you are querying from the dual table but trying to reference a column in the OEF_ITV_NON table.

 FROM DUAL
WHERE OEF_ITV_NDN.POD = 'JN4';

is not valid. If your query is against the dual table, you can only reference columns from the dual table. If your query was against the oef_itv_non table, you could reference the pod column. But that would return, presumably, multiple rows rather than the 1 row that you expect. And it would throw a mutating table exception since that's the table the trigger is defined on.

It isn't obvious to me what that WHERE clause is supposed to accomplish for you so it's hard to guess what you really want. My best guess is that you only want to assign the :new.max_event column a value if the :new.pod column has a value of JN4'. If that's the case, use anIF` statement

IF( :new.pod = 'JN4' )
THEN
  :new.max_event := DECODE( ...
END IF;

Your entire decode statement is also rather confusing. I'd have to work out what that is actually trying to accomplish to figure out how to rewrite it. It seems highly likely, though, that you could do whatever it is you're trying to do without nested decode statements using a single decode with many arguments or using a standard case statement.

Maybe you want

IF( :new.pod = 'JN4' )
THEN
  :new.max_event := (CASE WHEN :OLD.CHY_ATD_DATE != :NEW.CHY_ATD_DATE
                          THEN 'ATD CHY'
                          WHEN :OLD.CHY_ETD_DATE != :NEW.CHY_ETD_DATE
                          THEN 'ETD CHY'
                          ...
                      END);
END IF;

OTHER TIPS

I think this is just a matter of field: you have a trigger on OEF_ITV_NDN, so your where clause WHERE OEF_ITV_NDN.POD = 'JN4'; is invalid: just replace it with WHERE :NWE.POD = 'JN4';.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top