Formating UUID String ohne REGEXP_REPLACE und PL / SQL

Ich möchte das Ergebnis der Funktion sys_guid () wie in @ vorgeschlagen formatierediese Antwort

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

Aus Gründen der Leistung möchte ich die Verwendung von regexp_replace vermeiden (da ich eine große Anzahl von Datensätzen verarbeite).

Mein Szenario kann auf diesen Anwendungsfall vereinfacht werden:

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

Natürlich kann ich nicht Substr und Verkettung verwenden, da jeder SUBSTR eine andere SYS_GUID verarbeiten würde. Ich möchte auch in SQL bleiben, ohne einen Kontextwechsel zur PL / SQL-Funktion.

Ich habe eine Idee, wie ich Zeichenfolgen in SQL mithilfe einer Maske ähnlich wie Datum oder Nummer formatieren kann:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage