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

Trả lại một truy vấn từ một hàm?

CREATE OR REPLACE FUNCTION get_names(_tname varchar)
  RETURNS TABLE (col_a integer, col_b text) AS
$func$
BEGIN
   RETURN QUERY
   SELECT t.col_a, t.col_b  -- must match RETURNS TABLE
   FROM   mytable t
   WHERE  t.name = _tname;    
END
$func$  LANGUAGE plpgsql;

Gọi như thế này:

SELECT * FROM get_names('name')

Điểm chính:

  • Sử dụng RETURNS TABLE , vì vậy bạn không cần phải cung cấp danh sách tên cột cho mỗi lần gọi.

  • Sử dụng RETURN QUERY , đơn giản hơn nhiều.

  • Tên cột đủ điều kiện trong bảng để tránh xung đột đặt tên với OUT có tên giống hệt nhau tham số (bao gồm các cột được khai báo bằng RETURNS TABLE ).

  • Sử dụng biến được đặt tên thay vì ALIAS . Đơn giản hơn, làm theo cách tương tự và đó là cách ưu tiên.

  • Một hàm đơn giản như thế này cũng có thể được viết bằng LANGUAGE sql :

CREATE OR REPLACE FUNCTION get_names(_tname varchar)
  RETURNS TABLE (col_a integer, col_b text) AS
$func$
SELECT t.col_a, t.col_b  --, more columns - must match RETURNS above
FROM   mytable t
WHERE  t.name = $1;
$func$ LANGUAGE sql;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tên quy trình PostgreSQL trên Solaris

  2. LỖI:không thể tải thư viện “/opt/PostgreSQL/9.0/lib/postgresql/plperl.so”:libperl.so:

  3. Lỗi ổ cắm Postgresql trên OSX 10.7.3 khi chạy syncdb của Django

  4. Số hàng tối đa (có thể sử dụng) trong bảng Postgresql

  5. vấn đề bí danh cột postgres