J'ai une fonction plpgsql comme:curseur plpgsql sur la fonction unnest
DO
$$
DECLARE
c_id c.id%TYPE;
j_text c.j_options%TYPE;
j_option varchar;
c1 c%ROWTYPE;
begin
CREATE TYPE my_row_type AS (c2 TEXT);
for
--c1 in select c.j_options, c.id from c c
c1 in select * from c
loop
c_id = c1.id;
for
c2 in select * from unnest(string_to_array(c1.j_options,', '))
loop
raise notice 'Value: %, %', c_id, c2.j_options;
end loop;
end loop;
END
$$ language plpgsql;
Ma question est cette ligne:
c2 in select * from unnest(string_to_array(c1.j_options,', '))
La requête d'exemple que je lance pour exemple:
select unnest(string_to_array('1.0, 1.2',', '));
renvoie 2 lignes:
1. 1.0
2. 1.2
J'ai besoin de faire une boucle sur ces deux lignes, mais je ne suis pas sûr de ce que devrait être le type de retour de cette instruction unnest ou comment il devrait être déclaré dans la section declare.
L'erreur que je reçois lors de l'exécution du script:
ERROR: loop variable of loop over rows must be a record or row variable or
list of scalar variables
LINE 18: c2 in select * from unnest(string_to_array(c1.j_...
De la réponse ci-dessous je reçois l'erreur suivante
ERROR: function string_to_array(bytea, unknown) does not exist
LINE 1: select from unnest(string_to_array(c1.j_options,', '))
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
QUERY: select from unnest(string_to_array(c1.j_options,', '))
Je ne comprends pas pourquoi cela ne fonctionnerait pas dans le script. Il reconnaît que c1.j_options
est bytea
.
Mon peu de script modifié était:
for c2 in
select from unnest(string_to_array(c1.j_options,', '))
loop
raise notice '%', c2;
end loop;
Essayez 'string_to_array (convert_from (c1.j_options, 'utf8'), '')' – Abelisto
même avec UTF8 je reçois toujours le même message d'erreur :( – user1107753
Honnêtement, il est sujet à une autre question et d'enquête. Créer ce et aussi fournir DDL pour la table 'c'. – Abelisto