J'essaie de créer une fonction dans Postgres qui peut parcourir chaque paire clé/valeur dans un objet jsonb
donné.
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; $$
L'entrée d'argument devrait être un objet jsonb, tel que {"a":1, "b":2, "c":3}
.
Je souhaite parcourir chaque paire clé/valeur de l'objet. Comme vous pouvez le voir dans mon commentaire, j'avais l'habitude d'écrire du code backend avec des langages de programmation plus généraux comme c, Java, etc. Je ne suis donc pas bon en SQL. J'ai essayé de rechercher en ligne, mais ils parlent de la façon de parcourir le tableau jsonb
au lieu de l'objet. Donc vraiment coincé ici.
Utilisez jsonb_each(jsonb)
ou jsonb_each_text(jsonb)
dans une boucle FOR
comme:
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$;
Appel:
SELECT my_function('{"a":1, "b":2, "c":3}');
En relation:
Notez que pour de nombreux problèmes où les gens utilisaient des langages de programmation comme c, Java, etc. auraient tendance à utiliser une boucle, il existe un ensemble supérieur solution en SQL au coin de la rue. Exemples de code côte à côte: