sql >> Databáze >  >> RDS >> PostgreSQL

Portování procedury Oracle na PostgreSQL

Nemyslím si, že Postgres podporuje tuto konstrukci aktualizace (jednoduchý test, který jsem zkoušel, selže se stejnou chybou). Možná budete muset udělat něco takového:

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;

... za předpokladu, že jsem příliš nepokazil logiku;)

Dovolil jsem si změnit způsob, jakým jsou definovány parametry a návratový typ (protože to vypadá, že z funkce vlastně nic nevracíte?)

Edit:jejda, použil jsem špatnou konstrukci pro select into ...



  1. Rozdíl mezi seskupeným a neshlukovaným indexem

  2. Microsoft oznamuje SQL Server 2012 R2 a SQL Server 2012 R3!

  3. Efektivní externí rozpisování pomocí MySQL a ejabberd

  4. Použité příkazy SELECT mají jiný počet sloupců (REDUX!!)