Houlala.. ça manque de rigueur tout ça..
Rien que ça :
utilFormInter := substr('<p> Admin',positionFin);
suivant tous les positionFin possible, tu ne peux avoir comme retour que
<p> Admin
p> Admin
> Admin
Admin
Admin
dmin
min
in
n
NULL
Un code se construit et se teste pas à pas.
Bon, sinon pour la question de retrouver 2222222, il manque des précisions : comment savoir que c'est la chaine 2222222 qu'il faut ramener et pas 2222222</p> ?
Ensuite, s'il y a 2 DO dans la chaine qu'est ce qu'il faut prendre ?
En plus vu le texte, les changements d'énoncés, il est possible que le "<p> Admin ...</p>" soit une partie du texte complet, genre
'<p>Client ... DO11111</p><p>Admin.... DO222</p><p>Toto.. DO3333</p>'
Bref, en admettant qu'on prend le dernier DO du <p>Admin .. </p>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
DECLARE
utilFormEmailRef VARCHAR2(4000);
corpsEmail varchar(4000) := '<p>Toto DO111</p><p> Admin : vvvvv / xxxxx / vvvvv (toto) / DO2222222</p><p>DODO AU LIT</p>';
v_chaine VARCHAR2(4000);
BEGIN
IF instr(corpsEmail, '<p> Admin') > 0
then
-- Récupération de l'élement <p>Admin..
v_chaine := SUBSTR(corpsEmail, INSTR(corpsEmail, '<p> Admin'));
-- On ne garde que jusqu'au prochain </p> (sans le prendre)
v_chaine := SUBSTR(v_chaine, 1, INSTR(v_chaine, '</p>')-1);
-- S'il y a un DO, on récupère la partie de la chaine à partir de là (on prend le dernier DO)
utilFormEmailRef := SUBSTR(v_chaine, INSTR(v_chaine, 'DO', -1)+2);
END IF;
END; |
Le code est détaillé, il est bien sur optimisable en regroupant les instructions, mais c'est pour la compréhension de la façon de traiter le sujet.
Partager