我是postgresql的新手,可以使用指针前进。
问题: 我有一张桌子上有几个字段。其中3个需要使用返回3个数字的函数的结果进行更新。我该怎么做?
示例(显然不起作用):
更新gravitational_relations
设置x,y,z = SQL_CALCULATE_GRAVITY(很多来自选择的数字);
SQL_CALCULATE_GRAVITY返回3个数字。
如果我只能在每个变量中保存这3个数字并在中使用它们
更新....
设置.... ,
一切都会好的。
如果我要继续使用新设计,请告诉我并举例说明。
感谢任何帮助。
/迈克尔
答案 0 :(得分:1)
如果“来自选择的很多数字”不依赖于每个正在更新的记录,您可以使用:
UPDATE gravitational_relations
SET (x, y, z) = (f.output_param_name1, f.output_param_name2, f.output_param_name3)
FROM SQL_CALCULATE_GRAVITY(a lot of numbers which come from a select) AS f;
否则,如果“来自选择的很多数字”取决于每个更新的记录,您可以使用类似的东西:
UPDATE gravitational_relations
SET (x, y, z) = ((f).output_param_name1, (f).output_param_name2, (f).output_param_name3)
FROM (SELECT id, SQL_CALCULATE_GRAVITY(a lot of numbers which come from a select) AS f FROM gravitational_relations) AS x
WHERE gravitational_relations.id = x.id;
答案 1 :(得分:0)
一种方法是从plpgsql函数中调用更新,并在更新函数中调用重力函数,返回3个输出值。例如Out1,out2和out3。比您的更新使用这些值。
伪代码:
BEGIN FUNCTION
EXECUTE SQL_CALCULATE_GRAVITY(out1,out2,out3);
update gravitational_relations
set x = out1,
y = out2,
z = out3;
END FUNCTION
请参阅http://www.postgresql.org/docs/9.0/interactive/plpgsql-declarations.html并搜索输出以查看返回输出参数的函数示例。
答案 2 :(得分:0)
虽然我无法真正看到SQL_CALCULATE_GRAVITY函数如何返回3个单独的数字,如果你确定它会这样,那么你可以使用三个变量来读取这3个数字:
SELECT INTO x, y, z SQL_CALCULATE_GRAVITY();
然后您可以使用这些变量更新另一个表:
UPDATE table1 SET field1=x, field2=y, field3=z WHERE some_id=some_number;
答案 3 :(得分:0)
您应该可以直接访问这些字段:
UPDATE foo
SET bar1 = (SQL_CALCULATE_GRAVITY(numbers...)).bar1,
bar2 = (SQL_CALCULATE_GRAVITY(numbers...)).bar2,
...
如果SQL_CALCULATE_GRAVITY()是稳定/不可变的,那么每行只会调用一次。