В Oracle нет функции PL / SQL reverse()
. Так что это не работает:
declare
v varchar2(20);
begin
v:= reverse('krow not does ti');
dbms_output.put_line(v);
end;
/
Выдает полученную ошибку PLS-00201.
Однако есть недокументированная функция SQL , которую мы можем использовать в PL / SQL, но только при вызове механизма SQL:
declare
v varchar2(20);
begin
select reverse('skrow ti') into v from dual;
dbms_output.put_line(v);
end;
/
Конечно, поскольку reverse()
недокументирован, мы не должны его использовать, по крайней мере, в рабочем коде. Не уверен, почему это недокументировано. Я думаю, что Oracle использует это для обратных индексов, так что, возможно, есть некоторый предел для обратимого размера строки.
Вот демоверсия db <> fiddle .
Производительность немного хуже
Я думаю, что это стоимость перехода от движка PL / SQL к движку SQL и обратно. Так что все сводится к случаю использования. Если мы пишем функцию, которая будет использоваться только в чистом PL / SQL, то я думаю, что ваш подход лучше. Но если мы пишем функцию, которая будет использоваться в SQL, я бы подумал об использовании встроенной Oracle, хотя она не поддерживается.
Хотя, честно говоря, я не могу вспомнить, когда в последний раз я использовал reverse()
функцию - Oracle или свернутую вручную - в реальной жизни (в отличие от ответов на вопросы на форумах или аналогичных вопросов Code Golf :)).