相关疑难解决方法(0)

在PL/pgSQL中迭代整数[]

我试图integer[]在plpgsql函数中循环遍历整数数组().像这样的东西:

declare
    a integer[] = array[1,2,3];
    i bigint;
begin
    for i in a
loop 
    raise notice "% ",i;
end loop;
return true;
end
Run Code Online (Sandbox Code Playgroud)

在我的实际用例中,整数数组a作为参数传递给函数.我收到此错误:

ERROR:  syntax error at or near "$1"
LINE 1:   $1
Run Code Online (Sandbox Code Playgroud)

如何正确循环数组?

arrays postgresql loops plpgsql postgresql-8.4

40
推荐指数
1
解决办法
5万
查看次数

循环遍历PL/pgSQL中给定的值列表

我正在尝试遍历几个字段并在它们上运行一个函数:

FOR field IN ARRAY['f1','f2'] LOOP
    execute pg_temp.converFieldToLower(newTableNameRaw,field)
END LOOP;
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试使用的功能:

CREATE OR REPLACE FUNCTION pg_temp.converFieldToLower(t varchar, f varchar) RETURNS void AS $$
#variable_conflict use_variable
BEGIN
  EXECUTE concat_ws (' ', 'UPDATE',t,'SET',f,'= LOWER(',f,')');
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

看起来这不是声明数组的正确方法,我做错了什么?

ERROR:  syntax error at or near "ARRAY"
LINE 49:         FOR field IN ARRAY['f1','f2'] LOOP
Run Code Online (Sandbox Code Playgroud)

arrays postgresql loops plpgsql

6
推荐指数
2
解决办法
5314
查看次数

函数中的初始数组用于聚合多维数组

我有一个包含整数数组的表.

我想创建一个聚合函数,它将返回一个包含所有行的二维数组.然后它被传递给plr它做一些数学.

我有:

CREATE OR REPLACE
FUNCTION arrayappend(left int[][], right int[]) 
RETURNS int[] AS 
$BODY$
   SELECT $1 || $2 ;
$BODY$
LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)

和:

CREATE AGGREGATE array_sum2 (int[])  (
    SFUNC     = arrayappend,
    STYPE     = int[][],
    INITCOND  = '{}'
);
Run Code Online (Sandbox Code Playgroud)

但是返回类型int[]不是int[][]吗?

如何使用空的二维整数数组初始化聚合?

arrays postgresql aggregate-functions multidimensional-array

4
推荐指数
2
解决办法
6001
查看次数

postgres9.4循环到jsonb:如何选择key:val对的val

这个plpgsql脚本从一组jsonb对象键:值对中选择键,但是如何选择每对的值?

DO
$BODY$
DECLARE
    js jsonb := '{"a": "1", "b": "2", "c": "3"}';
    i text;
BEGIN
  FOR i IN SELECT * FROM jsonb_each_text(js)
  LOOP
    RAISE NOTICE 'key %', i;
    --RAISE NOTICE 'value %', i.value; <--fai
  END LOOP;
END;
$BODY$;
Run Code Online (Sandbox Code Playgroud)

应该可以作为手册页http://www.postgresql.org/docs/9.4/static/functions-json.html表示返回值是关键文本,值文本的设置.这篇帖子Postgres - 数组for循环回答了数组的问题.还尝试了jsonb_each()和jsonb_array_elements()将迭代器更改为jsonb,错误"无法从对象中提取元素"

postgresql for-loop multidimensional-array jsonb

3
推荐指数
1
解决办法
2919
查看次数

错误:运算符不存在:整数 = 整数[]

我正在尝试创建一个小函数,它将返回数组中的所有客户端,但我不断遇到错误。

DO $$
DECLARE
    c_ids INTEGER[] := array[12879,16759];
BEGIN
  SELECT *
  FROM   client
  WHERE  id IN (c_ids);
END $$;
Run Code Online (Sandbox Code Playgroud)

做这样的事情的正确方法是什么?我需要 c_ids 是一个变量,因为我将在查询中的许多地方使用它(示例直接查询不是最终查询)。

sql arrays postgresql

1
推荐指数
1
解决办法
2380
查看次数