Here a sample code:
set define off;
drop table brol;
create table brol
(
br varchar2(4000)
);
INSERT INTO brol ( br ) VALUES ( 'Proposition de décret institutionnalisant l assemblée citoyenne et le conseil citoyen, déposée par Madame Schyns (Doc. 221 (2019-2020) N° 1 et 1bis)
Proposition de décret spécial modifiant les articles 2, 5, 6 et 7 du décret spécial du 19 juillet 2018 instituant la consultation populaire, déposée par Madame Schyns (Doc. 222 (2019-2020) N° 1)
Proposition de modification du Règlement du Parlement de Wallonie visant à institutionnaliser les assemblées citoyennes et conseils citoyens, déposée par Madame Schyns (Doc. 223 (2019-2020) N° 1)
Rapporteur : Monsieur Sahli
Proposition de décret spécial modifiant les articles 2, 5, 6 et 7 du décret spécial du 19 juillet 2018 instituant la consultation populaire en vue d octroyer un droit d initiative aux commissions délibératives composées de députés et de citoyens tirés au sort, déposée par Madame Schyns, Messieurs Desquesnes, Antoine et Bastin (Doc. 278 (2020-2021) N° 1)
Désignation d un Rapporteur
Discussion - Votes
' );
commit;
select * from brol;
When i execute the next query:
select REGEXP_SUBSTR(br,'Doc. ([[:alnum:]]+\.?)') from brol;
i have as result:
Doc. 221
That a first good step and I was very happy to find it... But I need also to have as return:
Doc. 222
Doc. 223
Doc. 278
I m not able to have all 3 at the same moment.. Could you please help me to find what i forgot in the regexp_substr ?
select REGEXP_SUBSTR(br,'Doc. ([[:alnum:]]+\.?)',1,1) from brol;
Doc. 221
select REGEXP_SUBSTR(br,'Doc. ([[:alnum:]]+\.?)',1,2) from brol;
Doc. 222
select REGEXP_SUBSTR(br,'Doc. ([[:alnum:]]+\.?)',1,3) from brol;
Doc. 223
select REGEXP_SUBSTR(br,'Doc. ([[:alnum:]]+\.?)',1,4) from brol;
Doc. 278
Is there a way to know how many I ll find ? ==> nO it s not possible..
I found the approach with a function https://stackoverflow.com/a/23683522/10710461
create or replace function regexp_substr_mr (
p_data clob, p_re varchar ) return varchar as v_cnt number; v_results varchar(4000); begin v_cnt := regexp_count(p_data, p_re, 1,'m'); if v_cnt < 25 then for i in 1..v_cnt loop v_results := v_results || regexp_substr(p_data,p_re,1,i,'m') || chr(13) || chr(10); end loop; else v_results := 'WARNING more than 25 matches found'; end if;
return v_results; end;
But i m not able to adapt it...
Thx,
R.D
the function was perfect.. My call was not...
It s working. Thank you all for your answer. I ll check what is exactly the "connect" option cause I dont know it. I m in a package so it s easy for me to add a function.