PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Przenoszenie procedury Oracle do PostgreSQL

Nie sądzę, że Postgres obsługuje tę konstrukcję aktualizacji (prosty test, który wypróbowałem, kończy się niepowodzeniem z tym samym błędem). Być może będziesz musiał zrobić coś takiego:

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;

... zakładając, że nie zniekształciłem zbyt mocno logiki;)

Pozwoliłem sobie na zmianę sposobu definiowania parametrów i typu zwracanego (ponieważ wygląda na to, że faktycznie nie zwracasz niczego z funkcji?)

Edycja:ups, użyłem niewłaściwej konstrukcji dla select into ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dołącz do 2 tabel, w których dwa zestawy liczb nakładają się w łączących się kolumnach

  2. Wybieranie kolumn za pomocą DISTINCT w PostgreSQL

  3. Strategia indeksowania dla różnych kombinacji klauzul WHERE, w tym. wzorce tekstowe

  4. Jak zrywać połączenia TCP/IP przez utrzymywanie postgreSQL bez zmiany czegokolwiek w rejestrze?

  5. Zmiana klucza podstawowego na złożony klucz podstawowy