我在一个函数中做一个简单的查询,需要更改值但仅供参考。我不需要这样更新表。我设法编辑了这些值但我不知道怎么归还。
CREATE OR REPLACE FUNCTION setDetails(INTEGER,INTEGER) RETURNS TABLE (
id INTEGER,
name TEXT,
subsidy TEXT,
stratum_id NUMERIC,
price TEXT,
total FLOAT
) AS $$
DECLARE
service Record;
subscibed_services Record;
BEGIN
for service in SELECT services.*, false as subscribed, (CAST(services.price AS float) - CAST(services.subsidy AS float)) AS total FROM services WHERE services.stratum_id = $1 loop
for subscibed_services in SELECT services.id FROM services WHERE id IN (SELECT DISTINCT charge_details.service_id FROM charge_details WHERE charge_details.charge_id = $2) loop
if (CAST(subscibed_services.id as INTEGER) = CAST(service.id as INTEGER)) then
service.subscribed := true;
EXIT;
else
service.total := 0;
end if;
end loop;
end loop;
END;
$$ LANGUAGE plpgsql;
下面将执行此函数
SELECT setDetails(2,6320)
如你所见,这个查询没有给我带来任何东西。
感谢您的帮助,我为使用google翻译程序道歉:d
1条答案
按热度按时间q3aa05251#
如果您想从表函数得到一些结果,您应该填充相关的变量(定义在
table
子句列表),然后您应该使用RETURN NEXT
声明。文档对此进行了很好的描述。简单示例:
你的代码还有一个性能错误。查询上的两个嵌套循环可能很慢。你可以用
JOIN
(在本例中是自连接),并在一个循环上迭代,而不是嵌套两个循环。