Bonjour.

Je cherche à extraire les données d'une colonne JSON dont le contenu ressemble à ceci :
Code json : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
{
"persons": [
    {"nom": "Doe", "prenom": "John", "dateNaissance": [1900, 1, 1], "..."},
    {"nom": "Doe", "prenom": "Jane", "dateNaissance": [1900, 2, 1], "..."},
],
"...": [
    "..."
]
}

J'ai réussi à créer la requête select jsonb_path_query(colonne_json, '$.persons[*] ? (@.nom == "Doe")')->>'prenom' as Prenom from matable;.

Ça marche bien, mais mon ORM (Hibernate) ne comprends pas la requête.
Je passe donc par une fonction stockée à la place, mais le souci est que je ne sais pas comment rendre variable la partie "Doe", puisqu'elle est entourée de d'apostrophes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
CREATE OR REPLACE FUNCTION public.recherche(nom VARCHAR)
RETURNS VARCHAR	
LANGUAGE plpgsql
AS $function$
DECLARE prenom VARCHAR;
BEGIN
	SELECT jsonb_path_query(colonne_json, '$.persons[*] ? (@.nom == "Doe")')->>'prenom' INTO prenom
	FROM bdd.matable;
RETURN prenom;
END;
$function$
;
 
SELECT public.recherche("Doe");
J'aimerais donc remplacer la partie == "Doe" par quelque chose qui utilise le paramètre "nom".