在postgresql函数中循环jsonb对象的键/值对

Jan*_*neL 7 postgresql plpgsql json

我正在尝试在 Postgres 中创建一个函数,该函数可以遍历给定jsonb对象中的每个键/值对。

create or replace function myFunction
(input jsonb)
returns jsonb as $$
BEGIN

    // foreach(key in input)
    //       do some math operation on its corresponding value

    returns input;

END; $$
Run Code Online (Sandbox Code Playgroud)

参数输入应为 jsonb 对象,例如{"a":1, "b":2, "c":3}.

我想遍历对象中的每个键/值对。从我的评论中可以看出,我曾经使用更通用的编程语言(如 c、java 等)编写后端代码。所以我不擅长 SQL。我曾尝试在线搜索,但他们谈论如何遍历jsonb数组而不是对象。所以真的卡在这里了。

Erw*_*ter 5

使用jsonb_each(jsonb)jsonb_each_text(jsonb)FOR循环中,例如:

CREATE OR REPLACE FUNCTION my_function(input jsonb)
  RETURNS jsonb
  LANGUAGE plpgsql AS  -- language declaration required
$func$
DECLARE
   _key   text;
   _value text;
BEGIN
    FOR _key, _value IN
       SELECT * FROM jsonb_each_text($1)
    LOOP
       -- do some math operation on its corresponding value
       RAISE NOTICE '%: %', _key, _value;
    END LOOP;

    RETURN input;
END
$func$;
Run Code Online (Sandbox Code Playgroud)

称呼:

SELECT my_function('{"a":1, "b":2, "c":3}');
Run Code Online (Sandbox Code Playgroud)

有关的:

请注意,对于人们习惯于使用c、java 等编程语言而倾向于使用循环的许多问题,SQL 中提供了基于集合的高级解决方案。并排代码示例: