PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Porting della procedura Oracle su PostgreSQL

Non credo che Postgres supporti quel costrutto di aggiornamento (il semplice test che ho provato fallisce con lo stesso errore). Potresti dover fare qualcosa del genere:

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;

... ammesso che non abbia storpiato troppo la logica;)

Mi sono preso la libertà di modificare il modo in cui sono definiti i parametri e il tipo restituito (visto che sembra che tu non stia effettivamente restituendo nulla dalla funzione?)

Modifica:oops, ho usato il costrutto sbagliato per select into ...