PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Memindahkan Prosedur Oracle ke PostgreSQL

Saya tidak berpikir Postgres mendukung konstruksi pembaruan itu (tes sederhana yang saya coba gagal dengan kesalahan yang sama). Anda mungkin harus melakukan sesuatu seperti ini:

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;

... dengan asumsi saya tidak terlalu merusak logika;)

Saya mengambil kebebasan untuk mengubah cara parameter didefinisikan, dan tipe pengembalian (karena sepertinya Anda tidak benar-benar mengembalikan apa pun dari fungsi?)

Sunting:oops, saya menggunakan konstruksi yang salah untuk 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. Cara mengelompokkan/memilih kolom tipe JSON (PG::UndefinedFunction:ERROR:tidak dapat mengidentifikasi operator kesetaraan untuk tipe json)

  2. Postgres 9.1 vs Mysql 5.6 InnoDB?

  3. Mengimpor file dari PostgreSQL ke R

  4. Pengindeksan Basis Data di PostgreSQL

  5. Bagaimana Ceiling() Bekerja di PostgreSQL