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

Bagaimana cara menggunakan `RETURN NEXT` di PL/pgSQL dengan benar?

Contoh yang diberikan dapat diganti seluruhnya dengan RETURN QUERY :

BEGIN
    RETURN QUERY SELECT y_.y, 'hi' FROM generate_series(1,10,1) AS y_(y)
END;

yang akan menjadi banyak lebih cepat.

Secara umum Anda harus menghindari iterasi sedapat mungkin, dan sebagai gantinya mendukung operasi berorientasi set.

Di mana return next over a loop tidak dapat dihindari (yang sangat jarang, dan sebagian besar terbatas pada saat Anda membutuhkan penanganan pengecualian) Anda harus mengatur OUT nilai parameter atau parameter tabel, lalu return next tanpa argumen.

Dalam hal ini masalah Anda adalah baris SELECT yr.y, 'hi'; yang tidak melakukan apa-apa. Anda mengasumsikan bahwa tujuan implisit dari SELECT adalah parameter keluar, tapi bukan itu masalahnya. Anda harus menggunakan parameter out sebagai variabel loop seperti yang dilakukan @peterm, menggunakan tugas atau menggunakan SELECT INTO :

FOR yr IN SELECT * FROM generate_series(1,10,1) AS y_(y) 
LOOP
    RAISE NOTICE 'Computing %', yr.y;
    y := yr.y;
    result := 'hi';
    RETURN NEXT;
END LOOP;
RETURN;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 Cara Mendaftar semua Prosedur Tersimpan dalam Database PostgreSQL

  2. SQL - Buat tampilan dari beberapa tabel

  3. Pernyataan KASUS Postgres dalam sisipan

  4. Kelompokkan hasil kueri berdasarkan bulan dan tahun di postgresql

  5. Bagaimana cara membuat daftar semua pernyataan yang disiapkan untuk semua sesi aktif?