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

Menguji fungsi PostgreSQL yang menggunakan dan mengembalikan refcursor

Q1

"Tes kecil" Anda bisa berupa SQL biasa:

BEGIN;
SELECT get_function_that_returns_cursor('ret', 4100, 'foo', 123); -- note: 'ret'
FETCH ALL IN ret; -- works for any rowtype

COMMIT;  -- or ROLLBACK;

Jalankan COMMIT / ROLLBACK setelah Anda memeriksa hasilnya. Kebanyakan klien hanya menampilkan hasil dari perintah lat.

Selengkapnya di bab Mengembalikan Kursor dari manual.

Q2

Dan jika kita tidak mengetahui jenis baris yang dikembalikan, bagaimana kita bisa melakukannya?

Karena Anda hanya ingin memeriksa hasilnya, Anda dapat melemparkan seluruh catatan ke text .Dengan cara ini Anda menghindari masalah dengan tipe pengembalian dinamis untuk fungsi secara bersamaan.

Pertimbangkan demo ini:

CREATE TABLE a (a_id int PRIMARY KEY, a text);
INSERT INTO a VALUES (1, 'foo'), (2, 'bar');

CREATE OR REPLACE FUNCTION reffunc(INOUT ret refcursor) AS  -- INOUT param :)
$func$
BEGIN
    OPEN ret FOR SELECT * FROM a;
END
$func$ LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION ctest()
  RETURNS SETOF text AS
$func$
DECLARE
    curs1 refcursor;
    rec   record;
BEGIN
  curs1 := reffunc('ret');   -- simple assignment
  
  LOOP
    FETCH curs1 INTO rec;
    EXIT WHEN NOT FOUND;     -- note the placement!
    RETURN NEXT rec::text;
  END LOOP;
END
$func$ LANGUAGE plpgsql;

-> SQLfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buat tabel dua jenis di PostgreSQL

  2. Bagaimana cara memulihkan satu tabel dari cadangan .sql postgresql?

  3. Bagaimana cara menerapkan hubungan banyak ke banyak di PostgreSQL?

  4. Daftar Python ke Array PostgreSQL

  5. Alat untuk menghasilkan diagram tabel database dengan PostgreSQL?