基本上我想创建一个像PHP一样的数据集,我可以在变量中存储select语句的返回值,然后用它来做逻辑决策。
这是我正在尝试的:
DROP FUNCTION cc_get_balance(date);
CREATE OR REPLACE FUNCTION cc_get_balance(theDate date) RETURNS TABLE(balance numeric(20,10), rate numeric(20,10), final_balance numeric(20,10)) AS $$
DEClARE
currency1_to_EUR numeric(20,10);
currency2_to_EUR numeric(20,10);
table_ret record;
BEGIN
currency1_to_EUR := (SELECT rate FROM cc_getbalancesfordatewitheurs(theDate) WHERE from_currency = 'currency1' AND to_currency = 'EUR');
currency2_to_EUR := (SELECT rate FROM cc_getbalancesfordatewitheurs(theDate) WHERE from_currency = 'currency2' AND to_currency = 'EUR');
SELECT * INTO table_ret FROM cc_getbalancesfordatewitheurs(theDate);
END;
$$ LANGUAGE 'plpgsql';
SELECT * FROM cc_get_balance('2014-02-15'::date);
我不知道这是否正确。我希望能够将table_ret用作数据集,如:
select * from table_ret ...
因此,我不必对数据库进行大量查询。我已经找到了这样做的例子,但没有发现我需要或想做的事情。
版本为9.3.4,cc_getbalancesfordatewitheurs()返回一个包含from_currency,to_currency,rate,exchange,balance和converted_amount列的表。大约30行。我需要运行to_currency列并根据列中的货币列表运行一些其他转换。所以我不想要为转换查询数据库30次。我需要的所有数据都收集在cc_getbalancesfordatewitheurs()返回的表中。 cc_get_balance()应返回表中从其他函数中找到的所有行以及将to_currency最终转换为EUR的列
答案 0 :(得分:0)
通常,没有"表变量"。您可以使用光标或临时表
更好的是,使用FOR
loop的隐式光标
更好的是,如果可能的话,在一个基于集合的操作中完成所有操作。查询。