Om du försöker undvika den odokumenterade reverse()
funktionen kan du använda utl_raw.reverse()
funktion
istället med lämplig konvertering också och från RAW:
select utl_i18n.raw_to_char(
utl_raw.reverse(
utl_i18n.string_to_raw('Some string', 'AL32UTF8')), 'AL32UTF8')
from dual;
UTL_I18N.RAW_TO_CHAR(UTL_RAW.REVERSE(UTL_I18N.STRING_TO_RAW('SOMESTRING','AL32UT
--------------------------------------------------------------------------------
gnirts emoS
Så det är att ta ett ursprungligt värde; gör utl_i18n.string_to_raw()
på det; skicka sedan det till utl_raw.reverse()
; skicka sedan tillbaka resultatet av det genom utl_i18n.raw_to_char()
.
Inte helt säker på hur det kommer att klara multibyte-tecken, eller vad du vill ska hända med dem i alla fall...
Eller en variant av diskussionen @RahulTripathi länkade till , utan teckenuppsättningshantering:
select utl_raw.cast_to_varchar2(utl_raw.reverse(utl_raw.cast_to_raw('Some string')))
from dual;
UTL_RAW.CAST_TO_VARCHAR2(UTL_RAW.REVERSE(UTL_RAW.CAST_TO_RAW('SOMESTRING')))
--------------------------------------------------------------------------------
gnirts emoS
Men den tråden noterar också att den bara fungerar för en-byte-tecken.