PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Пренасяне на процедура на Oracle към PostgreSQL

Не мисля, че Postgres поддържа тази конструкция за актуализиране (простият тест, който опитах, се проваля със същата грешка). Може да се наложи да направите нещо подобно:

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;

... ако приемем, че не съм объркал логиката твърде зле;)

Позволих си да променя начина, по който са дефинирани параметрите и типа на връщане (тъй като изглежда, че всъщност не връщате нищо от функцията?)

Редактиране:опа, използвах грешна конструкция за 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. Alter Table е твърде бавен в postgre

  2. Общ брой единици в битова маска на Postgres

  3. Oracle еквивалент на Postgres' DISTINCT ON?

  4. Проучване на забавянето на PostGIS (издание 2019 г.)

  5. Как да проверите дали даден масив е празен в Postgres