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