1
我有这个PostgreSQL的PL/pgSQL函数:如何使用SOCI进行动态绑定到PL/pgSQL函数?
CREATE OR REPLACE FUNCTION get_people()
RETURNS SETOF people AS $$
BEGIN
RETURN QUERY SELECT * FROM people;
END;
$$ LANGUAGE plpgsql;
然后我尝试使用SOCI的应用程序来读取数据,使用此代码:
session sql {"postgresql://dbname=postgres"};
row person {};
procedure proc = (sql.prepare << "get_people()", into(person));
proc.execute(true);
我期望person
有数据的第一个人,但它只包含一个带有存储过程名称的列(即“get_people”)。
所以我不知道我在做什么错在这里,或不做。它是PL/pgSQL代码还是SOCI代码?也许SOCI不支持存储过程的动态绑定。此外,这种方法只允许我读第一行,但其余的行呢?我知道SOCI与rowset
类读取结果集,但文档说它只适用于查询。请帮忙。
是的,现在我明白了!对于不返回任何东西的函数,您应该使用'procedure'类,但对于返回查询结果的函数,您必须使用'statement'类并编写一个调用函数的查询(就像在SQL中那样)。一旦你意识到这一点,你知道你可以用'rowset'类使用相同的方法获得多行。谢啦。 – eXe