特定のjsonb
オブジェクトの各キー/値ペアをループできる関数をPostgresで作成しようとしています。
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; $$
引数入力は、{"a":1, "b":2, "c":3}
などのjsonbオブジェクトであることが期待されています。
オブジェクトの各キー/値のペアをループ処理したいと思います。私のコメントからわかるように、私はcやJavaなどのより汎用的なプログラミング言語でバックエンドコードを記述していたため、SQLは得意ではありません。私はオンラインで検索を試みましたが、オブジェクトの代わりにjsonb
配列をループする方法について話しています。本当にここにこだわっています。
FOR
loop のように jsonb_each(jsonb)
またはjsonb_each_text(jsonb)
を使用します。
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$;
コール:
SELECT my_function('{"a":1, "b":2, "c":3}');
関連:
C、Javaなどのプログラミング言語に慣れている多くの問題はループを使用する傾向があることに注意してください。SQLにはすぐ近くに優れたセットベースのソリューションがあります。 。並列コードの例: