将表中的数据保存到变量中并在函数内部使用(创建数据集)

时间:2014-07-02 14:25:24

标签: function postgresql stored-procedures plpgsql

基本上我想创建一个像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的列

1 个答案:

答案 0 :(得分:0)

通常,没有"表变量"。您可以使用光标或临时表 更好的是,使用FOR loop的隐式光标 更好的是,如果可能的话,在一个基于集合的操作中完成所有操作。查询。

相关示例:
Cursor based records in PostgreSQL