sql >> Database >  >> RDS >> PostgreSQL

Oracle-procedure overdragen naar PostgreSQL

Ik denk niet dat Postgres die updateconstructie ondersteunt (de eenvoudige test die ik heb geprobeerd mislukt met dezelfde fout). Misschien moet je zoiets als dit doen:

CREATE OR REPLACE FUNCTION DATA_UPDATE
  (mission NUMERIC,
   task NUMERIC)
   RETURNS void as '
DECLARE
   offScheduled int4;
   totalReceivers int4; 
BEGIN
IF mission IS NOT NULL THEN
  select COALESCE(SUM(RR.TRQ_FUEL_OFFLOAD),0),
  COALESCE(SUM(RR.TRQ_NUMBER_RECEIVERS),0) into offScheduled, totalReceivers 
  FROM REFUELING_REQUEST RR, MISSION_REQUEST_PAIRING MRP
             WHERE MO.MSN_INT_ID = MRP.MSN_INT_ID
               AND MO.MO_INT_ID = MRP.MO_INT_ID
               AND MRP.REQ_INT_ID = RR.REQ_INT_ID;

 UPDATE MISSION_OBJECTIVE MO
     SET MO.MO_TKR_TOTAL_OFF_SCHEDULED = offScheduled,
          MO.MO_TKR_TOTAL_RECEIVERS = totalReceivers 
     WHERE MO.MSN_INT_ID = mission
     AND MO.MO_INT_ID = task ;
END IF;
END;
' LANGUAGE plpgsql;

... ervan uitgaande dat ik de logica niet al te slecht heb verminkt;)

Ik ben zo vrij geweest om de manier waarop de parameters worden gedefinieerd, en het retourtype te wijzigen (omdat het lijkt alsof je niets van de functie retourneert?)

Bewerken:oeps, ik heb de verkeerde constructie gebruikt voor select into ...



  1. Bereken het aantal seconden sinds een bepaalde datum/tijd in SQLite

  2. Oracle-certificeringen

  3. mysql Stored Procedure, Query om te controleren of deze bestaat of niet

  4. Hoe 2 opeenvolgende rijwaarden in een resultaatset-object te vergelijken met behulp van python