Моя функция для транслитерации украинского языка в pl/sql.
Правила описаны в законе Украины:
http://zakon4.rada.gov.ua/laws/show/55-2010-п
Правила описаны в законе Украины:
http://zakon4.rada.gov.ua/laws/show/55-2010-п
create or replace function fn_embossing_name(p_name varchar2) return varchar2
/* http://zakon4.rada.gov.ua/laws/show/55-2010-п
ТАБЛИЦЯ
транслітерації українського алфавіту латиницею
------------------------------------------------------------------
| Український | Латиниця | Позиція у | Приклади написання |
| алфавіт | | слові |--------------------------|
| | | |українською | латиницею |
| | | | мовою | |
|-------------+----------+------------+------------+-------------|
| Аa | Aа | |Алушта |Alushta |
| | | |Андрій |Andrii |
|-------------+----------+------------+------------+-------------|
| Бб | Bb | |Борщагівка |Borshchahivka|
| | | |Борисенко |Borysenko |
|-------------+----------+------------+------------+-------------|
| Вв | Vv | |Вінниця |Vinnytsia |
| | | |Володимир |Volodymyr |
|-------------+----------+------------+------------+-------------|
| Гг | Hh | |Гадяч |Hadiach |
| | | |Богдан |Bohdan |
| | | |Згурський |Zghurskyi |
|-------------+----------+------------+------------+-------------|
| Ґґ | Gg | |Ґалаґан |Galagan |
| | | |Ґорґани |Gorgany |
|-------------+----------+------------+------------+-------------|
| Дд | Dd | |Донецьк |Donetsk |
| | | |Дмитро |Dmytro |
|-------------+----------+------------+------------+-------------|
| Ее | Ee | |Рівне |Rivne |
| | | |Олег |Oleh |
| | | |Есмань |Esman |
|-------------+----------+------------+------------+-------------|
| Єє | Ye | на початку |Єнакієве |Yenakiieve |
| | | слова |Гаєвич |Haievych |
| | ie | в інших |Короп'є |Koropie |
| | | позиціях | | |
|-------------+----------+------------+------------+-------------|
| Жж | Zh zh | |Житомир |Zhytomyr |
| | | |Жанна |Zhanna |
| | | |Жежелів |Zhezheliv |
|-------------+----------+------------+------------+-------------|
| Зз | Zz | |Закарпаття |Zakarpattia |
| | | |Казимирчук |Kazymyrchuk |
|-------------+----------+------------+------------+-------------|
| Ии | Yy | |Медвин |Medvyn |
| | | |Михайленко |Mykhailenko |
|-------------+----------+------------+------------+-------------|
| Іі | Ii | |Іванків |Ivankiv |
| | | |Іващенко |Ivashchenko |
|-------------+----------+------------+------------+-------------|
| Її | Yi | на початку |Їжакевич |Yizhakevych |
| | | слова |Кадиївка |Kadyivka |
| | i | в інших |Мар'їне |Marine |
| | | позиціях | | |
|-------------+----------+------------+------------+-------------|
| Йй | Y | на початку |Йосипівка |Yosypivka |
| | | слова |Стрий |Stryi |
| | i | в інших |Олексій |Oleksii |
| | | позиціях | | |
|-------------+----------+------------+------------+-------------|
| Кк | Kk | |Київ |Kyiv |
| | | |Коваленко |Kovalenko |
|-------------+----------+------------+------------+-------------|
| Лл | Ll | |Лебедин |Lebedyn |
| | | |Леонід |Leonid |
|-------------+----------+------------+------------+-------------|
| Мм | Mm | |Миколаїв |Mykolaiv |
| | | |Маринич |Marynych |
|-------------+----------+------------+------------+-------------|
| Нн | Nn | |Ніжин |Nizhyn |
| | | |Наталія |Nataliia |
|-------------+----------+------------+------------+-------------|
| Оо | Oo | |Одеса |Odesa |
| | | |Онищенко |Onyshchenko |
|-------------+----------+------------+------------+-------------|
| Пп | Pp | |Полтава |Poltava |
| | | |Петро |Petro |
|-------------+----------+------------+------------+-------------|
| Рр | Rr | |Решетилівка |Reshetylivka |
| | | |Рибчинський |Rybchynskyi |
|-------------+----------+------------+------------+-------------|
| Сс | Ss | |Суми |Sumy |
| | | |Соломія |Solomiia |
|-------------+----------+------------+------------+-------------|
| Тт | Tt | |Тернопіль |Ternopil |
| | | |Троць |Trots |
|-------------+----------+------------+------------+-------------|
| Уу | Uu | |Ужгород |Uzhhorod |
| | | |Уляна |Uliana |
|-------------+----------+------------+------------+-------------|
| Фф | Ff | |Фастів |Fastiv |
| | | |Філіпчук |Filipchuk |
|-------------+----------+------------+------------+-------------|
| Хх | Kh kh | |Харків |Kharkiv |
| | | |Христина |Khrystyna |
|-------------+----------+------------+------------+-------------|
| Цц | Ts ts | |Біла Церква |Bila Tserkva |
| | | |Стеценко |Stetsenko |
|-------------+----------+------------+------------+-------------|
| Чч | Ch ch | |Чернівці |Chernivtsi |
| | | |Шевченко |Shevchenko |
|-------------+----------+------------+------------+-------------|
| Шш | Sh sh | |Шостка |Shostka |
| | | |Кишеньки |Kyshenky |
|-------------+----------+------------+------------+-------------|
| Щщ |Shch shch | |Щербухи |Shcherbukhy |
| | | |Гоща |Hoshcha |
| | | |Гаращенко |Harashchenko |
|-------------+----------+------------+------------+-------------|
| Юю | Yu | на початку |Юрій |Yurii |
| | | слова |Корюківка |Koriukivka |
| | iu | в інших | | |
| | | позиціях | | |
|-------------+----------+------------+------------+-------------|
| Яя | Ya | на початку |Яготин |Yahotyn |
| | | слова |Ярошенко |Yaroshenko |
| | ia | в інших |Костянтин |Kostiantyn |
| | | позиціях |Знам'янка |Znamianka |
| | | |Феодосія |Feodosiia |
------------------------------------------------------------------
_______________
Примітка: 1. Буквосполучення "зг" відтворюється латиницею як "zgh"
(наприклад, Згорани - Zghorany, Розгон - Rozghon) на
відміну від "zh" - відповідника української літери
"ж".
2. М'який знак і апостроф латиницею не відтворюються.
3. Транслітерація прізвищ та імен осіб і географічних
назв здійснюється шляхом відтворення кожної літери
латиницею.
Проверка преобразований по списку из "постановы":
with name_test as ( select 'Алушта' name_1, 'Alushta' name_2 from dual union all
select 'Андрій', 'Andrii' from dual union all
select 'Борщагівка', 'Borshchahivka' from dual union all
select 'Борисенко', 'Borysenko' from dual union all
select 'Вінниця', 'Vinnytsia' from dual union all
select 'Володимир', 'Volodymyr' from dual union all
select 'Гадяч', 'Hadiach' from dual union all
select 'Богдан', 'Bohdan' from dual union all
select 'Згурський', 'Zghurskyi' from dual union all
select 'Ґалаґан', 'Galagan' from dual union all
select 'Ґорґани', 'Gorgany' from dual union all
select 'Донецьк', 'Donetsk' from dual union all
select 'Дмитро', 'Dmytro' from dual union all
select 'Рівне', 'Rivne' from dual union all
select 'Олег', 'Oleh' from dual union all
select 'Есмань', 'Esman' from dual union all
select 'Єнакієве', 'Yenakiieve' from dual union all
select 'Гаєвич', 'Haievych' from dual union all
select 'Короп''є', 'Koropie' from dual union all
select 'Житомир', 'Zhytomyr' from dual union all
select 'Жанна', 'Zhanna' from dual union all
select 'Жежелів', 'Zhezheliv' from dual union all
select 'Закарпаття', 'Zakarpattia' from dual union all
select 'Казимирчук', 'Kazymyrchuk' from dual union all
select 'Медвин', 'Medvyn' from dual union all
select 'Михайленко', 'Mykhailenko' from dual union all
select 'Іванків', 'Ivankiv' from dual union all
select 'Іващенко', 'Ivashchenko' from dual union all
select 'Їжакевич', 'Yizhakevych' from dual union all
select 'Кадиївка', 'Kadyivka' from dual union all
select 'Мар''їне', 'Marine' from dual union all
select 'Йосипівка', 'Yosypivka' from dual union all
select 'Стрий', 'Stryi' from dual union all
select 'Олексій', 'Oleksii' from dual union all
select 'Київ', 'Kyiv' from dual union all
select 'Коваленко', 'Kovalenko' from dual union all
select 'Лебедин', 'Lebedyn' from dual union all
select 'Леонід', 'Leonid' from dual union all
select 'Миколаїв', 'Mykolaiv' from dual union all
select 'Маринич', 'Marynych' from dual union all
select 'Ніжин', 'Nizhyn' from dual union all
select 'Наталія', 'Nataliia' from dual union all
select 'Одеса', 'Odesa' from dual union all
select 'Онищенко', 'Onyshchenko' from dual union all
select 'Полтава', 'Poltava' from dual union all
select 'Петро', 'Petro' from dual union all
select 'Решетилівка', 'Reshetylivka' from dual union all
select 'Рибчинський', 'Rybchynskyi' from dual union all
select 'Суми', 'Sumy' from dual union all
select 'Соломія', 'Solomiia' from dual union all
select 'Тернопіль', 'Ternopil' from dual union all
select 'Троць', 'Trots' from dual union all
select 'Ужгород', 'Uzhhorod' from dual union all
select 'Уляна', 'Uliana' from dual union all
select 'Фастів', 'Fastiv' from dual union all
select 'Філіпчук', 'Filipchuk' from dual union all
select 'Харків', 'Kharkiv' from dual union all
select 'Христина', 'Khrystyna' from dual union all
select 'Біла Церква', 'Bila Tserkva' from dual union all
select 'Стеценко', 'Stetsenko' from dual union all
select 'Чернівці', 'Chernivtsi' from dual union all
select 'Шевченко', 'Shevchenko' from dual union all
select 'Шостка', 'Shostka' from dual union all
select 'Кишеньки', 'Kyshenky' from dual union all
select 'Щербухи', 'Shcherbukhy' from dual union all
select 'Гоща', 'Hoshcha' from dual union all
select 'Гаращенко', 'Harashchenko' from dual union all
select 'Юрій', 'Yurii' from dual union all
select 'Корюківка', 'Koriukivka' from dual union all
select 'Яготин', 'Yahotyn' from dual union all
select 'Ярошенко', 'Yaroshenko' from dual union all
select 'Костянтин', 'Kostiantyn' from dual union all
select 'Знам''янка', 'Znamianka' from dual union all
select 'Феодосія', 'Feodosiia' from dual union all
select 'Згорани', 'Zghorany' from dual union all
select 'Розгон', 'Rozghon' from dual )
select case fn_embossing_name(name_1)
when name_2
then 'TRUE'
else 'FALSE'
end status
, name_1
, name_2
from name_test
*/
is
m_name varchar2(255);
m_ukr varchar2(100) := q'[АаБбВвГ㥴ДдЕеЗзИиІіЙйКкЛлМмНнОоПпРрСсТтУуФфїCc -]';
m_lat varchar2(100) := q'[AaBbVvHhGgDdEeZzYyIiYiKkLlMmNnOoPpRrSsTtUuFfiCc -]';
m_itm number;
m_sym varchar2(1);
m_res varchar2(255);
m_pos number;
begin
m_name := lower(p_name);
m_name := replace(m_name, '`', '');
m_name := replace(m_name, 'ь', '');
m_name := replace(m_name, '''', '');
m_name := replace(m_name, 'зг', 'зґг');
m_name := replace(m_name, 'я', 'йа');
m_name := replace(m_name, 'є', 'йе');
m_name := replace(m_name, 'ю', 'йу');
m_name := replace(m_name, 'ж', 'зг');
m_name := replace(m_name, 'х', 'кг');
m_name := replace(m_name, 'ц', 'тс');
m_name := replace(m_name, 'щ', 'шч');
m_name := replace(m_name, 'ч', 'cг');
m_name := replace(m_name, 'ш', 'сг');
m_name := initcap(m_name);
m_name := replace(m_name, 'Ї', 'Иі');
for m_itm in 1..length(m_name) loop
m_sym := substr(m_name, m_itm, 1);
m_pos := instr(m_ukr, m_sym);
if m_pos > 0 then
m_res := m_res || substr(m_lat, m_pos, 1);
else
m_res := m_res || '?';
end if;
dbms_output.put_line(instr(m_ukr, m_sym));
end loop;
return m_res;
end;
Сервисы кабмина часто не работают.
ОтветитьУдалитьДля транслитерации можно использовать например вот такой сервис
kmu-translite.co.ua