Bonjour,
Je viens sur ce forum aujourd'hui pour vous faire part d'un petit souci.
J'ai écrit une fonction sous pgAdmin 1.14 qui permet d'aller récupérer dans une colonne varchar(1024), chercher la position d'une expression régulière (date sous la forme AAAAMMJJ), puis d'insérer cette date dans une colonne dateStatut11 ou dateStatut12 qui sont au format timestamp.
Voici la fonction :
J'ai le message d'erreur suivant lors de l'exécution :
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
16
17
18
19
20
21
22
23
24
25
26
27 CREATE OR REPLACE FUNCTION rattrapage_dateStatut() RETURNS SETOF titrealpha AS $BODY$ DECLARE POS integer; a titrealpha%rowtype; b titrebinaire%rowtype; BEGIN FOR a IN SELECT * FROM titrealpha ta WHERE codestatut = '11' and id_titrealpha < 500000 LOOP POS := position('[0-9]{8}' in a.libellestatut::text); update titrealpha set dateStatut11 = date(concat(substr(a.libellestatut::text , POS + 4, 4), substr(a.libellestatut::text , POS + 2, 2), substr(a.libellestatut::text , POS, 2))); RETURN NEXT a; -- return current row of SELECT END LOOP; FOR a IN SELECT * FROM titrealpha ta WHERE codestatut = '12' and id_titrealpha < 500000 LOOP POS := position('[0-9]{8}' in a.libellestatut::text); update titrealpha set dateStatut12 = date(concat(substr(a.libellestatut::text , POS + 4, 4), substr(a.libellestatut::text , POS + 2, 2), substr(a.libellestatut::text , POS, 2))); POS := position('[0-9]{8}' in substr(ta.libellestatut::text, POS)); update titrealpha set dateStatut11 = date(concat(substr(a.libellestatut::text , POS + 4, 4), substr(a.libellestatut::text , POS + 2, 2), substr(a.libellestatut::text , POS, 2))); RETURN NEXT a; -- return current row of SELECT END LOOP; RETURN; END; $BODY$ LANGUAGE plpgsqlÀ noter que la valeur présente dans la colonne est la suivante : "DATE CHANGEMENT DE STATUT : 05062014", c'est comme si la variable POS était toujours égale à 0 après la fonction position().
Code : Sélectionner tout - Visualiser dans une fenêtre à part syntaxe en entrée invalide pour le type date : « E CHATD ».
J'ai essayé de faire la même fonction avecMais j'obtiens le message suivant lors de l'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part POS := REGEXP_INSTR(a.libellestatut::text, text '[0-9]{8}');
Vous devez ajouter des conversions explicites de type.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ERREUR: la fonction regexp_instr(text, text) n'existe pas LINE 1: SELECT REGEXP_INSTR(a.libellestatut::text, '[0-9]{8}') ^ HINT: Aucune fonction ne correspond au nom donné et aux types d'arguments.
Pourriez-vous m'aider à trouver pourquoi l'une et l'autre de ces fonctions ne fonctionnent pas?
Merci d'avance à la communauté.
Partager