Нет необходимости создавать свою собственную функцию, и, честно говоря, кажется, что это пустая трата времени, когда это можно сделать довольно легко с уже существующими функциями sql. Необходимо соблюдать осторожность при учете небрежного ввода данных.
Вот еще один способ достичь поставленной цели:
with name_list as
(select ' Parisi, Kenneth R' name from dual)
select name
-- There may be a space after the comma. This will strip an arbitrary
-- amount of whitespace from the first name, so we can easily extract
-- the first initial.
, substr(trim(substr(name, instr(name, ',') + 1)), 1, 1) AS first_init
-- a simple substring function, from the first character until the
-- last character before the comma.
, substr(trim(name), 1, instr(trim(name), ',') - 1) AS last_name
-- put together what we have done above to create the output field
, lower(substr(trim(substr(name, instr(name, ',') + 1)), 1, 1)) ||
lower(substr(trim(name), 1, instr(trim(name), ',') - 1)) AS init_plus_last
from name_list;
НТН,
Гейб