PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Kiểm tra các hàm PostgreSQL sử dụng và trả về con trỏ

Q1

"Thử nghiệm nhỏ" của bạn có thể là SQL thuần túy:

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

COMMIT;  -- or ROLLBACK;

Thực thi COMMIT / ROLLBACK sau bạn đã kiểm tra kết quả. Hầu hết các ứng dụng khách chỉ hiển thị kết quả của lệnh lat.

Thông tin khác trong chương Trả về con trỏ của sách hướng dẫn.

Quý 2

Và nếu chúng tôi không biết loại hàng đang được trả về, chúng tôi có thể làm như thế nào?

Vì bạn chỉ muốn kiểm tra kết quả, bạn có thể truyền toàn bộ bản ghi sang text . Bằng cách này, bạn hoàn toàn tránh được sự cố với các kiểu trả về động cho hàm.

Hãy xem xét bản trình diễn này:

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. 2 cách để thêm Zeros hàng đầu trong PostgreSQL

  2. Làm thế nào để chuyển đổi Unix epoch sang một dấu thời gian

  3. Đếm số lần xuất hiện của một chuỗi con trong một chuỗi trong PostgreSQL

  4. Cài đặt PostgreSQL trên Docker

  5. Cách giám sát PostgreSQL bằng Nagios