Formateando una cadena UUID sin REGEXP_REPLACE y PL / SQL

Me gustaría formatear el resultado de la función sys_guid () como se propone enesta respuesta

select regexp_replace(rawtohex(sys_guid())
       , '([A-F0-9]{8})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{4})([A-F0-9]{12})'
       , '\1-\2-\3-\4-\5') 
         as FORMATTED_GUID 
 from dual

Por razones de rendimiento, me gustaría evitar el uso de regexp_replace (ya que proceso una gran cantidad de registros).

Mi escenario se puede simplificar para este caso de uso:

 select rawtohex(sys_guid()) GUID
 from dual connect by level <= 2;

Obviamente no puedo usar substr y concatenación ya que cada SUBSTR procesará un SYS_GUID diferente. También me gustaría permanecer en SQL, sin un cambio de contexto a la función PL / SQL.

Alguna idea de cómo formatear una cadena en SQL similar a la fecha o el número usando una máscara:

 to_char(rawtohex(sys_guid(),'CCCCCCCC-CCCC-CCCC-CCCC-CCCCCCCCCCCC') /* note, this is clear illegal */

Respuestas a la pregunta(1)

Su respuesta a la pregunta