sql >> Databasteknik >  >> RDS >> PostgreSQL

Portering av Oracle-proceduren till PostgreSQL

Jag tror inte att Postgres stöder den uppdateringskonstruktionen (det enkla testet jag försökte misslyckas med samma fel). Du kanske måste göra något så här:

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;

... förutsatt att jag inte har förvanskat logiken så illa;)

Jag tog mig friheten att ändra hur parametrarna definieras och returtypen (eftersom det ser ut som att du faktiskt inte returnerar något från funktionen?)

Edit:oj, jag använde fel konstruktion för select into ...



  1. Hur man sparar ett MySQL-frågeresultat till en .CSV-fil

  2. 3 sätt att konvertera ett heltal till decimal i SQL Server

  3. Mysql-transaktionsåterställning vid fel i uppdateringen

  4. Varför kräver en rekursiv CTE i Transact-SQL en UNION ALL och inte en UNION?