Don't neglect to test with the target pattern in all possible positions in the string, including not there at all. Always expect the unexpected! This method uses 3 capture groups. The first one is the start of the line or all characters followed by a space that occur before the second group. The second group is one or more word characters (a-z, A-Z, 0-9, including the _ (underscore) character) followed by 'as' . The third capture group is the rest of the line.
This is replaced by the 1st and 3rd capture groups, effectively removing the word before and including 'as'. Starts at position 1, does it for all occurrences ignoring case.
SQL> with tbl(id, str) as (
select 1, 'run_id, src_key, cd_key, ml_orig as cde_value, date_key, desc' from dual union all
select 2, 'ml_orig as cde_value, run_id, src_key, cd_key, date_key, desc' from dual union all
select 3, 'run_id, src_key, cd_key, date_key, desc, ml_orig as cde_value' from dual union all
select 4, 'run_id, src_key, cd_key, date_key, desc, ml_orig as cde_value' from dual union all
select 5, 'ml_oria as run_id, ml_orib as src_key, ml_oric as desc, ml_orid as cde_value' from dual union all
select 6, NULL from dual union all
select 7, 'run_id,ml_orig as src_key, cd_key, date_key, desc, ml_orig as cde_value' from dual
)
select id, regexp_replace(str, '(^|.*?, *)(\w+ +as +)(.*)', '\1\3', 1, 0, 'i') fixed
from tbl;
ID FIXED
---------- --------------------------------------------------
1 run_id, src_key, cd_key, cde_value, date_key, desc
2 cde_value, run_id, src_key, cd_key, date_key, desc
3 run_id, src_key, cd_key, date_key, desc, cde_value
4 run_id, src_key, cd_key, date_key, desc, cde_value
5 run_id, src_key, desc, cde_value
6
7 run_id,src_key, cd_key, date_key, desc, cde_value
7 rows selected.
SQL>