PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Oracle-Prozedur nach PostgreSQL portieren

Ich glaube nicht, dass Postgres dieses Update-Konstrukt unterstützt (der einfache Test, den ich versucht habe, schlägt mit demselben Fehler fehl). Möglicherweise müssen Sie so etwas tun:

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;

... vorausgesetzt, ich habe die Logik nicht zu sehr verstümmelt;)

Ich habe mir die Freiheit genommen, die Art und Weise, wie die Parameter definiert sind, und den Rückgabetyp zu ändern (da es so aussieht, als würden Sie tatsächlich nichts von der Funktion zurückgeben?)

Bearbeiten:Hoppla, ich habe das falsche Konstrukt für select into verwendet ...