将查询结果返回到数组中
以下代码片段创建三个数组,它们被传递到 PL/R 函数中。
FOR s_id, s_latitude, s_longitude IN
SELECT
s.id,
s.latitude_decimal,
s.longitude_decimal
FROM
climate.station s
WHERE
s.applicable AND
s.latitude_decimal BETWEEN box.latitude_min AND box.latitude_max AND
s.longitude_decimal BETWEEN box.longitude_min AND box.longitude_max
LOOP
SELECT array_append( v_id, s_id ) INTO v_id;
SELECT array_append( v_latitude, s_latitude ) INTO v_latitude;
SELECT array_append( v_longitude, s_longitude ) INTO v_longitude;
END LOOP;
数组声明为:
v_id integer[];
v_latitude double precision[];
v_longitude double precision[];
我宁愿使用 CREATE TYPE 并传递一个数组,其中每个元素包含三个值。
您将如何编写此代码以使其不使用 FOR ... LOOP
?
PL/R 函数的第一行是:
stations <- cbind( v_id, v_longitude, v_latitude )
我想消除该行代码并简化 SELECT
查询。
谢谢。
The following code snippet creates three arrays, which are passed into a PL/R function.
FOR s_id, s_latitude, s_longitude IN
SELECT
s.id,
s.latitude_decimal,
s.longitude_decimal
FROM
climate.station s
WHERE
s.applicable AND
s.latitude_decimal BETWEEN box.latitude_min AND box.latitude_max AND
s.longitude_decimal BETWEEN box.longitude_min AND box.longitude_max
LOOP
SELECT array_append( v_id, s_id ) INTO v_id;
SELECT array_append( v_latitude, s_latitude ) INTO v_latitude;
SELECT array_append( v_longitude, s_longitude ) INTO v_longitude;
END LOOP;
The arrays are declared as:
v_id integer[];
v_latitude double precision[];
v_longitude double precision[];
I would rather use CREATE TYPE
and pass one array with each element containing three values.
How would you code this so that it does not use a FOR ... LOOP
?
The first line of the PL/R function is:
stations <- cbind( v_id, v_longitude, v_latitude )
I would like to eliminate that line of code and simplify the SELECT
query.
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
根据 pl/r 文档,“...两个-维 PostgreSQL 数组映射到 R 矩阵...”
也许类似...
According to the pl/r documentation, "...two-dimensional PostgreSQL arrays are mapped to R matrixes..."
Maybe something like...
您可以使用以下代码并继续使用 3 个数组:
或者使用行构造函数并组装一个复合类型的数组:
顺便说一句,这仅适用于 PostgreSQL 8.4+
You could use the following code and continue using 3 arrays:
or use the row constructor and assemble an array of a composite type:
BTW, this will only work on PostgreSQL 8.4+