postgresql - 如何从 plpgsql 中的多个表返回多行?

标签 postgresql stored-procedures plpgsql

如何从 plpgsql 中的多个表返回多行,我试图从具有内部连接的 2 个表中返回行? 这是我的代码

 CREATE OR REPLACE FUNCTION library.getallbookwithcategory()
 RETURNS SETOF library.book AS
  $BODY$
 DECLARE
 r library.book%rowtype;
 BEGIN
 FOR r IN select book.*,category.name from library.book left join library.category on category.id=book.category_id 
WHERE book.id > 0 order by dateadded ASC
LOOP
    -- can do some processing here
    RETURN NEXT r; 
END LOOP;
RETURN;
  END
  $BODY$
   LANGUAGE plpgsql

我需要从类别中返回名称

最佳答案

有更多方法可以做到这一点。一:

postgres=# SELECT * FROM boo;
 id | foo_id |  a  |  b   
----+--------+-----+------
  1 |      1 | 100 | 1000
  2 |      1 | 200 | 2000
  3 |      2 | 300 | 4000
(3 rows)

postgres=# SELECT * FROM foo;
 id | a | b 
----+---+---
  1 | 1 | 2
  2 | 3 | 4
(2 rows)

CREATE OR REPLACE FUNCTION foo_boo() 
RETURNS TABLE (foo_a int, foo_b int, boo_a int, boo_b int) AS $$
BEGIN            
  FOR foo_a, foo_b, boo_a, boo_b IN 
     SELECT f.a fa, f.b fb, b.a ba, b.b bb
        FROM foo f 
             JOIN boo b
             ON f.id = boo.foo_id
  LOOP
    RETURN NEXT;
  END LOOP;
  RETURN;
END;
$$ LANGUAGE plpgsql;

postgres=# SELECT * FROM foo_boo();
 foo_a | foo_b | boo_a | boo_b 
-------+-------+-------+-------
     1 |     2 |   100 |  1000
     1 |     2 |   200 |  2000
     3 |     4 |   300 |  4000
(3 rows)

关于postgresql - 如何从 plpgsql 中的多个表返回多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22010405/

相关文章:

sql - PostgreSQL 中的撇号和引号 - 如何替换撇号?

c - 正确查询的 ODBC 中存在语法错误

sql - 使用 T-SQL 连接来自所有父行的字符串的最有效方法是什么?

postgresql - PostgreSql 函数中的保存点

PostgreSQL:与 sql 相比,plpgsql 语言的相同请求速度较慢

performance - 使用 INDEX 将光标滚动到第一个搜索结果

sql - 使用可为空字段否定 SQL WHERE 条件

stored-procedures - CallableStatement 真的不受 SQL 注入(inject)的影响吗?

mysql - 我的mysql功能不起作用?

sql - 如何从所有模式中删除函数