A small PL/SQL wrapper can run the conversion repeatedly until no more underscores are found. I've included a few extra statements to match my company's camelcasing convention (initial capital and capitalized "ID").
UPDATE md_field SET NAME = lower(NAME) WHERE NAME LIKE '%\_%' ESCAPE '\';
UPDATE md_field SET NAME = upper(substr(NAME, 1, 1))||substr(NAME, 2) WHERE NAME LIKE '%\_%' ESCAPE '\';
UPDATE md_field SET NAME = REPLACE(NAME, 'id', 'ID') WHERE NAME LIKE '%\_%' ESCAPE '\';
DECLARE
vsql LONG;
v_cnt NUMBER;
BEGIN
LOOP
vsql := 'UPDATE md_field SET NAME = substr(NAME, 1, instr(NAME, ''_'')-1)||upper(substr(NAME, instr(NAME, ''_'')+1, 1))||substr(NAME, instr(NAME, ''_'')+2) WHERE NAME LIKE ''%\_%'' ESCAPE ''\''';
EXECUTE IMMEDIATE vsql;
SELECT COUNT (*) INTO v_cnt FROM md_field WHERE NAME LIKE '%\_%' ESCAPE '\';
EXIT WHEN v_cnt = 0;
END LOOP;
END;
/