我正在尝试将表的内容具体化为 PL/PGSQL 中的多维数组。
(仅适用于那些想知道“邻居”是什么的人:表 wnode 和楔形定义了一个带有节点wnode
和边的图wedge
。现在我想将节点 v 的邻居存储在包含在的数组中neighbors[v]
)。
这是我到目前为止所做的:
DECLARE
neighbors INTEGER[][];
v INTEGER;
BEGIN
FOR v IN SELECT n_id FROM wnode LOOP
SELECT ARRAY ( SELECT n2_id FROM wedge WHERE n1_id=v) INTO neighbors[v];
END LOOP;
RETURN neighbors;
由于语法错误,上述代码失败:
ROW 7: ...( SELECT n2_id FROM wedge WHERE n1_id=v) INTO neighbors[v];
^
我尝试的下一件事是引入一个支持变量tmp
:
DECLARE
neighbors INTEGER[][];
v INTEGER;
tmp INTEGER[];
BEGIN
FOR v IN SELECT n_id FROM wnode LOOP
SELECT ARRAY ( SELECT n2_id FROM wedge WHERE n1_id=v) INTO tmp;
neighbors[v] := tmp;
END LOOP;
RETURN neighbors;
END
我得到了这个运行时错误:
ERROR: invalid input syntax for integer: »{140,153,290,360,393}«
我也试过使用SELECT array_append(neighbors, tmp) INTO neighbors;
没有任何成功。
我现在没有想法。我接下来要尝试的是遍历tmp
并分配每个值neighbors[v][i] := tmp[i];
……不是很优雅。
我想知道如何以更优雅的方式填充我的多维数组?(也许只使用单个 SQL 查询是可能的?)。
谢谢你的帮助。:-)
编辑:架构