powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Склонение фамилий. (Вариант решения)
15 сообщений из 40, страница 2 из 2
Склонение фамилий. (Вариант решения)
    #33713733
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Милый моему сердцу тестовый вариант - Хуан Хуанович Рохас Кастильо.
...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #33714006
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 valerytin: Спасибо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
set serveroutput on
declare
  PadejFIO varchar2( 100 );
begin
  PadejFIO:=snp_case('Путин Владимир Владимирович', 'Р', 'ФИО', 'М' );
  dbms_output.put_line(PadejFIO);
  PadejFIO:=snp_case('Хуан Хуанович Рохас Кастильо', 'Р', 'ФИО', 'М');
  dbms_output.put_line(PadejFIO);
  PadejFIO:=snp_case('Хуан Хуанович Рохас Кастильо', 'Р', 'ФИО' );
  dbms_output.put_line(PadejFIO);
  PadejFIO:=snp_case('Гомон Ярослав Кузьмич', 'Р', 'ФИО' );
  dbms_output.put_line(PadejFIO);
end;
/
Путина Владимира Владимировича
Хуана Хуановича Рохас
Хуан Хуанович Рохас
Гомона Ярослава Кузьмича
...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #33716741
valerytin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
-- вариант для извращений:
-- 1. 'Хуан Хуанович Рохас Кастильо'->'Хуан Хуанович Рохас-Кастильо'
--  2 . replace(snp_case('Хуан Хуанович Рохас-Кастильо','Д','ИОФ'),'-',' ')
Панацеи нет. Есть возможность - пишем идеал, нет - пользуем подходящее...
...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #33716751
Фотография geo_life
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 valerytin
Спасибо. Отличный вариант.

а я вот у себя ошибку нашел .
вместо
Код: plaintext
	elsif (v_RWord1 = 'Н') and ((v_RWord2 = 'И') and (v_RWord2 = 'Ы')) then
должно быть
Код: plaintext
	elsif (v_RWord1 = 'Н') and ((v_RWord2 = 'И') or (v_RWord2 = 'Ы')) then
...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #33872865
Svoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибка:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
в строке:
elsif v_RWord2='Ц' then
v_SS := str_Left(v_SS,v_DlSS-1) +
iif (v_Padeg='Р', iif (v_UpCase=1,'Ы','ы'),
iif (v_Padeg='Д', iif (v_UpCase=1,'Е','е'),
iif (v_Padeg='В', iif (v_UpCase=1,'У','у'),
iif (v_Padeg='Т', iif (v_UpCase=1,'ЕЙ','ей'),
iif (v_Padeg='П', iif (v_UpCase=1,'Е','е'),
'')))));
...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #33872917
Yuriy B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вместо "+" поставь "||"
v_SS := str_Left(v_SS,v_DlSS-1) || iif (v_Padeg='Р', iif (v_UpCase=1,'Ы','ы'), ...
...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #33874098
Фотография geo_life
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yuriy BВместо "+" поставь "||"
v_SS := str_Left(v_SS,v_DlSS-1) || iif (v_Padeg='Р', iif (v_UpCase=1,'Ы','ы'), ...
Да, точно, недоглядел.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Склонение фамилий. (Вариант решения)
    #35642754
meelas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У кого нибудь есть вариант для склонение украинских имен и фамилий?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Склонение фамилий. (Вариант решения)
    #36421051
usmazat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
valerytin,

а можно ли как то подифицировать этой функцию дабы она правильно учитывала имена вида " Алия,Сания,Асия и другие женския имена оканчивающия на ударное я ? согласно справке грамота ру "Слова женского рода на -ия (в том числе имена собственные) имеют в дательном и предложном падеже ед. числа, в отступление от общего правила, окончание -и, а не -е: армии, линии, станции, России, Марии, Евгении. Но личные имена восточного и иного происхождения, оканчивающиеся на ударное -я, имеют в дательном падеже окончание -е: Зульфия – к Зульфие, Алия – к Алие"
насколько я пониманию стоит подкрутить здесь.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
elsif l_tailchr='я' and nvl(length(l_fname), 0 )> 1  then
    if term_cmp(l_fname,'ия') and lower(substr(l_fname,- 4 )) in ('ьфия') then
     chng(l_fname, 1 ,'и','е','ю','ей','е');
    elsif term_cmp(l_fname,'ия') then
     chng(l_fname, 1 ,'и','и','ю','ей','и');
    else
     chng(l_fname, 1 ,'и','е','ю','ей','е');
    end if;

но как сделать это так чтоб не затронуть русские имена вида "Мария, евгения". или может лучше какой то словарь исключений завести. тогда как его прикрутить сюда
частично это учитывается здесь для имен *ьфия.
if term_cmp(l_fname,'ия') and lower(substr(l_fname,-4)) in ('ьфия') then
chng(l_fname,1,'и','е','ю','ей','е');


а как учесть остальные ("Алия",Сания и т.д.)
. и как добавить словарь исключений для женских имен которые не склоняются

Айгуль, Гузель

с уважением usmazat
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Склонение фамилий. (Вариант решения)
    #38115338
hexcept
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стотыщ пардонов за старую тему, но на днях столкнулся с теми же проблемами:usmazatкак учесть остальные ("Алия",Сания и т.д.). и как добавить словарь исключений для женских имен которые не склоняются Айгуль, ГузельМожет, кому сгодится FIO_CASE() :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
create or replace function fio_case( -- падежная форма ФИО for Oracle 10g+;
-- hexcept,hexcept@gmail.com;
 p_fio in varchar2,   -- ФИО
 p_padzh in varchar2, -- падеж: 'р'|'Р'|'2'-родительный,'д'|'Д'|'3'-дательный,
                      -- 'в'|'В'|'4'-винительный,'т'|'Т'|'5'-творительный,
                      -- 'п'|'П'|'6'-предложный
 p_fio_fmt in varchar2:='ФИО', -- формат ФИО: 'Алексей Немов'->'ИФ',
                               -- 'Ольга Львовна Гидова-Бережная'->'ИОФ'
 p_sex in varchar2:=null -- пол: 'ж'|'Ж'|'м'|'М'
 ) return varchar2 deterministic
 is
 l_pdzh_chr varchar2(4);
 l_pdzh pls_integer;
 l_sex varchar2(4):=substr(trim(lower(p_sex)),1,1);
 l_tailchr varchar2(4);
 l_nmlen number(4,0);
 l_name_s varchar2(2000):=null;
 l_name_n varchar2(2000):=null;
 l_fio varchar2(2000):=null;
 l_fname varchar2(2000):=null;
 l_mname varchar2(2000):=null;
 l_fullname varchar2(2000):=ltrim(rtrim(p_fio,' -'),' -');
 l_pos pls_integer;
 l_fio_fmt varchar2(10):=nvl(upper(substr(ltrim(p_fio_fmt),1,3)),'ФИО');
 l_ch varchar2(1):=chr(7); -- замена символа '.'
--
 function term( s in varchar2,t in varchar2 ) return boolean is
 begin
  if nvl(length(s),0)<nvl(length(t),0) then return false;
  elsif substr(lower(s),-length(t))=lower(t) then return true;
  end if;
  return false;
 end;
--
 procedure chng(s in out varchar2,p in pls_integer,n in number,
  pr in varchar2,pd in varchar2,pv in varchar2,pt in varchar2,pp in varchar2) is
 begin
  if length(s)>1 then
   s:=substr(s,1,length(s)-n)||
    case when substr(s,-1)=upper(substr(s,-1)) then
     upper(case p when 2 then pr when 3 then pd when 4 then pv
      when 5 then pt when 6 then pp end)
    else
     lower(case p when 2 then pr when 3 then pd when 4 then pv
      when 5 then pt when 6 then pp end)
    end;
   end if;
 end;
--
begin -- fio_case()
 if soundex(p_fio) is not null then return l_fullname; end if; -- latin
 l_pdzh_chr:=upper(substr(p_padzh,1,1)); -- падеж
 l_pdzh:=case l_pdzh_chr
  when 'И' then 1 when 'Р' then 2 when 'Д' then 3
  when 'В' then 4 when 'Т' then 5 when 'П' then 6 else 0 end;
 if l_pdzh=0 and ltrim(l_pdzh_chr,'0123456789') is null then
  l_pdzh:=nvl(to_number(l_pdzh_chr),0);
 end if;
 if l_pdzh not between 2 and 6 then return p_fio; end if;
-- формат ФИО:
 if l_fio_fmt is null or length(l_fio_fmt)>3
  or ltrim(l_fio_fmt,'ФИО') is not null or instr(l_fio_fmt,'Ф',1,2)>0
  or instr(l_fio_fmt,'И',1,2)>0 or instr(l_fio_fmt,'О',1,2)>0
 then return p_fio;
 end if;
-- ФИО:
 l_fullname:=
  trim(replace(replace(case when instr(l_fullname,'  ')>0
  then regexp_replace(l_fullname,' +',' ') else l_fullname
  end,' -','-'),'- ','-'));
 if l_fullname is null then return p_fio;
 elsif instr(l_fullname,'.')>0 then -- случай 'Иван И.Якин'
  l_fullname:=regexp_replace(l_fullname,'(\w)\.(\w)','\1'||l_ch||' \2');
 end if;
-- оглы,кызы:
 if instr(lower(l_fullname),'оглы')>0 then
  l_fullname:=regexp_replace(l_fullname,' ([оО][гГ][лЛ][ыЫ])','_\1');
  l_sex:=nvl(l_sex,'м');
 elsif instr(lower(l_fullname),'кызы')>0 then
  l_fullname:=regexp_replace(l_fullname,' ([кК][ыЫ][зЗ][ыЫ])','_\1');
  l_sex:=nvl(l_sex,'ж');
 end if;
 if instr(l_fio_fmt,'Ф')>0 then
  l_name_s:=regexp_substr(l_fullname,'[^ ]+',1,instr(l_fio_fmt,'Ф'));
 end if;
 if instr(l_fio_fmt,'И')>0 then
  l_fname:=regexp_substr(l_fullname,'[^ ]+',1,instr(l_fio_fmt,'И'));
 end if;
 if instr(l_fio_fmt,'О')>0 then
  l_mname:=regexp_substr(l_fullname,'[^ ]+',1,instr(l_fio_fmt,'О'));
 end if;

 l_nmlen:=nvl(length(l_name_s),0);
 if nvl(l_sex,'z') not in ('м','ж') then -- пол не определен,
-- пробуем определить его по отчеству:
  if upper(l_mname) like '%ИЧ' then l_sex:='м';
  elsif upper(l_mname) like '%НА' then l_sex:='ж';
-- по фамилии:
  elsif instr(',ва,на,ая,',','||substr(lower(l_name_s),-2)||',')>0 then
   l_sex:='ж';
  elsif instr(',ов,ев,ёв,ин,ев,ий,ый,',','||substr(lower(l_name_s),-2)||',')>0
  then l_sex:='м';
  else l_sex:='ж';
  end if;
 end if;
 if l_name_s is not null then  -- фамилия
-- сдвоенная фамилия:
  if instr(l_name_s,'-')>0 and lower(l_name_s) not like 'тер-%' then
   l_name_n:=
    substr(l_name_s,1,instr(l_name_s,'-')-1)||' '||l_fname||' '||l_mname;
   l_fio:=fio_case(l_name_n,p_padzh,'ФИО',l_sex);
   l_name_n:=substr(l_fio,1,instr(l_fio,' ')-1)||'-';
   l_name_s:=substr(l_name_s,instr(l_name_s,'-')+1);
  end if;
  l_tailchr:=lower(substr(l_name_s,-1));
  if l_sex='м' then  -- мужчины
   if nvl(instr('оеуюиэы',l_tailchr),0)=0 then
    if l_tailchr='в' then chng(l_name_s,l_pdzh,0,'а','у','а','ым','е');
    elsif l_tailchr='н' and term(l_name_s,'ин') then
     chng(l_name_s,l_pdzh,0,'а','у','а','ым','е');
    elsif l_tailchr='ц' and term(l_name_s,'ец') then
     if l_nmlen>3 and instr('аец,еец,иец,оец,уец',substr(l_name_s,-3))>0 then
      chng(l_name_s,l_pdzh,2,'йца','йцу','йца','йцем','йце');
     elsif
      l_nmlen>3
      and instr('тец,бец,вец,мец,нец,рец,сец',lower(substr(l_name_s,-3)))>0
      and instr('а,е,и,о,у,ы,э,ю,я,ё',lower(substr(l_name_s,-4,1)))>0
     then chng(l_name_s,l_pdzh,2,'ца','цу','ца','цом','це');
     elsif l_nmlen>3 and lower(substr(l_name_s,-3))='лец' then
      chng(l_name_s,l_pdzh,2,'ьца','ьцу','ьца','ьцом','ьце');
     else chng(l_name_s,l_pdzh,0,'а','у','а','ом','е');
     end if;
    elsif l_tailchr='х'
     and (term(l_name_s,'их') or term(l_name_s,'ых'))
    then chng(l_name_s,l_pdzh,0,null,null,null,null,null);
    elsif instr('б,г,д,ж,з,л,м,н,п,р,с,т,ф,х,ц,ч,ш,щ',l_tailchr)>0
    then chng(l_name_s,l_pdzh,0,'а','у','а','ом','е');
    elsif l_tailchr='я'
     and not(term(l_name_s,'ия') or term(l_name_s,'ая'))
    then chng(l_name_s,l_pdzh,1,'и','е','ю','ей','е');
    elsif l_tailchr='а'
     and not(term(l_name_s,'иа') or term(l_name_s,'уа'))
    then chng(l_name_s,l_pdzh,1,'и','е','у','ой','е');
    elsif l_tailchr='ь' then chng(l_name_s,l_pdzh,1,'я','ю','я','ем','е');
    elsif l_tailchr='к' then
     if l_nmlen>4 and term(l_name_s,'ок') then
      chng(l_name_s,l_pdzh,2,'ка','ку','ка','ком','ке');
     elsif l_nmlen>4
      and (term(l_name_s,'лек') or term(l_name_s,'рек'))
     then chng(l_name_s,l_pdzh,2,'ька','ьку','ька','ьком','ьке');
     else chng(l_name_s,l_pdzh,0,'а','у','а','ом','е');
     end if;
    elsif l_tailchr='й' then
     if l_nmlen>4 then
      if (term(l_name_s,'ский') or term(l_name_s,'цкий')) then
       chng(l_name_s,l_pdzh,2,'ого','ому','ого','им','ом');
      elsif term(l_name_s,'ой') then
       chng(l_name_s,l_pdzh,2,'ого','ому','ого','им','ом');
      elsif term(l_name_s,'ый') then
       chng(l_name_s,l_pdzh,2,'ого','ому','ого','ым','ом');
      elsif
       instr('рий,жий,лий,вий,дий,бий,гий,зий,мий,ний,пий,сий,фий,хий',
        lower(substr(l_name_s,-3)))>0
      then chng(l_name_s,l_pdzh,1,'я','ю','я','ем','и');
      elsif term(l_name_s,'ий') then
       chng(l_name_s,l_pdzh,2,'его','ему','его','им','им');
      else chng(l_name_s,l_pdzh,1,'я','ю','я','ем','е');
      end if;
     else chng(l_name_s,l_pdzh,1,'я','ю','я','ем','е');
     end if;
    end if;
   end if;
  elsif l_sex='ж' then  -- женщины
   if instr('ова,ева,ына,ина,ена',lower(substr(l_name_s,-3)))>0 then
    chng(l_name_s,l_pdzh,1,'ой','ой','у','ой','ой');
   elsif term(l_name_s,'ая') and lower(substr(l_name_s,-3,1))='ц' then
    chng(l_name_s,l_pdzh,2,'ей','ей','ую','ей','ей');
   elsif term(l_name_s,'ая') then
    chng(l_name_s,l_pdzh,2,'ой','ой','ую','ой','ой');
   elsif term(l_name_s,'ля') or term(l_name_s,'ня') then
    chng(l_name_s,l_pdzh,1,'и','е','ю','ей','е');
   elsif term(l_name_s,'а') and lower(substr(l_name_s,-2,1)) in ('д')
   then chng(l_name_s,l_pdzh,1,'ы','е','у','ой','е');
   end if;
  end if;
 end if;
 if l_fname is not null then  -- имя
  l_tailchr:=lower(substr(l_fname,-1));
  if l_sex='м' then  -- мужчины
   if nvl(instr('е,и,у',l_tailchr),0)=0 then
    if upper(l_fname)='ЛЕВ' then
     chng(l_fname,l_pdzh,2,'ьва','ьву','ьва','ьвом','ьве');
    elsif instr('б,в,г,д,з,ж,к,м,н,п,р,с,т,ф,х,ц,ч,ш,щ',l_tailchr)>0 then
     chng(l_fname,l_pdzh,0,'а','у','а','ом','е');
    elsif l_tailchr='а' then chng(l_fname,l_pdzh,1,'ы','е','у','ой','е');
    elsif l_tailchr='о' then chng(l_fname,l_pdzh,1,'а','у','а','ом','е');
    elsif l_tailchr='я' then
     if term(l_fname,'ья') then chng(l_fname,l_pdzh,1,'и','е','ю','ей','е');
     elsif term(l_fname,'ия') then
      chng(l_fname,l_pdzh,1,'и','е','ю','ей','е');
     else chng(l_fname,l_pdzh,1,'и','е','ю','ей','е');
     end if;
    elsif l_tailchr='й' then
     if term(l_fname,'ай') then chng(l_fname,l_pdzh,1,'я','ю','я','ем','е');
     else
      if term(l_fname,'ей') then
       chng(l_fname,l_pdzh,1,'я','ю','я','ем','е');
      else chng(l_fname,l_pdzh,1,'я','ю','я','ем','и');
      end if;
     end if;
    elsif l_tailchr='ь' then chng(l_fname,l_pdzh,1,'я','ю','я','ем','е');
    elsif l_tailchr='л' then
     if term(l_fname,'авел') then
      chng(l_fname,l_pdzh,2,'ла','лу','ла','лом','ле');
     else chng(l_fname,l_pdzh,0,'а','у','а','ом','е');
     end if;
    end if;
   end if;
  elsif l_sex='ж' then  -- женщины
   if l_tailchr='а' and nvl(length(l_fname),0)>1 then
    if instr('га,ха,ка,ша,ча,ща,жа',lower(substr(l_fname,-2)))>0 then
     chng(l_fname,l_pdzh,1,'и','е','у','ой','е');
    else chng(l_fname,l_pdzh,1,'ы','е','у','ой','е');
    end if;
   elsif l_tailchr='я' and nvl(length(l_fname),0)>1 then
    if term(l_fname,'ия') then
     if instr(
      'Адл,Ал,Алф,Альф,Ас,Асл,Аф,Баг,Вал,Васв,Васф,Вел,'||
      'Гал,Гаф,Гольф,Гул,Гульс,Гульф,Дал,Дан,Дар,Дел,Дил,Дилф,Дульф,Жар,'||
      'Зак,Зал,Зан,Зар,Зельф,Зил,Зулф,Зульф,Ид,Ильс,Кадр,Кал,Каф,Кем,'||
      'Лам,Лутф,Мад,Марз,Мунз,Над,Наж,Наз,Нак,Нал,Нурз,Нур,Нурс,Нюр,'||
      'Рав,Раз,Рал,Рамз,Рам,Ран,Расм,Раф,Роз,Руз,Рум,Руф,'||
      'Сав,Сад,Сал,Сан,Сар,Саф,Сол,Сур,Суф,Тал,Тасл,Тат,Ульв,'||
      'Фавз,Фак,Фал,Фанз,Фан,Фатх,Фик,Фирз,Хам,Хан,Шамг,Шамс,Элф,',
      replace(initcap(l_fname)||',','ия,',','))>0 -- Альфия,Нурия..
     then chng(l_fname,l_pdzh,1,'и','е','ю','ей','е');
     else chng(l_fname,l_pdzh,1,'и','и','ю','ей','и'); -- Мария,Юлия..
     end if;
    else chng(l_fname,l_pdzh,1,'и','е','ю','ей','е');
    end if;
   elsif l_tailchr='ь' then
    if term(l_fname,'вь') then chng(l_fname,l_pdzh,1,'и','и','ь','ью','и');
    elsif term(l_fname,'ль') and instr(
     'Айгу,Айгю,Айсе,Асе,Бактыгу,Гуза,Гузе,Гузя,Гюзе,Гюзя,'||
     'Джанаргу,Жангу,Идигу,Мавджигу,Миннегузе,Миннегу,Миргу,'||
     'Назгу,Нургу,Нико,Оразгу,Орозгу,Сапарку,Фирангю,Шахрагу,',
     replace(initcap(l_fname)||',','ль,',','))>0 -- несклоняемые Айгуль,Гузель..
    then null;
    else chng(l_fname,l_pdzh,1,'и','и','ь','ью','ье');
    end if;
   end if;
  end if;
 end if;
 if l_mname is not null then  -- отчество
  l_tailchr:=lower(substr(l_mname,-1));
  if l_sex='м' then  -- мужчины
   if l_tailchr='ч' then chng(l_mname,l_pdzh,0,'а','у','а','ем','е'); end if;
  elsif l_sex='ж' then  -- женщины
   if l_tailchr='а' and length(l_mname)<>1 then
    chng(l_mname,l_pdzh,1,'ы','е','у','ой','е');
   end if;
  end if;
 end if;
-- окончательная конкатенация:
 l_fio_fmt:=nvl(upper(substr(ltrim(p_fio_fmt),1,3)),'ФИО');
 l_fullname:=null;
 l_pos:=1;
 loop
  if l_pos>1 then l_fullname:=l_fullname||' '; end if;
  l_fullname:=l_fullname||
   case substr(l_fio_fmt,l_pos,1)
    when 'Ф' then l_name_n||l_name_s when 'И' then l_fname when 'О' then l_mname
   end;
  l_pos:=l_pos+1;
  if l_pos>nvl(length(l_fio_fmt),0) then exit; end if;
 end loop;
 return
  replace(replace(replace(replace(replace(replace(replace(nvl(ltrim(rtrim(
  l_fullname,' -'),' -'),ltrim(rtrim(case
   when instr(p_fio,'  ')>0 then regexp_replace(p_fio,' +',' ')
   else p_fio end,' -'),' -')),'  ',' '),l_ch||' ','.'),l_ch,'.'),
   '_о',' о'),'_О',' О'),'_к',' к'),'_К',' К');
end fio_case;

...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #38115348
multic-drive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Очень нужна помощь в установке Oracle 11 g. Я его установил, задал пароль. В SQLPlus коннектиться, а SQL Developer не может... Что делать понять не могу?
...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #38115662
бгг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
multic-drive,

ФИО свое скажи, мы его сначала просклоняем, а потом посмотрим...
...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #38228736
rybba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В склонении сдвоенной фамилии ошибка
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
-- Предусмотрим обработку сдвоенной фамилии:
  if instr(l_name_s,'-')>0 and lower(l_name_s) not like 'тер-%' then
   l_name_n:=
    substr(l_name_s,1,instr(l_name_s,'-')-1)||' '||l_fname||' '||l_mname;
   l_fio:=snp_case(l_name_n,p_padzh,'ФИО',l_sex);
   l_name_n:=substr(l_fio,1,instr(l_fio,' ')-1)||'-';
   l_name_s:=substr(l_name_s,instr(l_name_s,'-')+1);
  end if;



здесь должно быть не 'ФИО', а p_fio, иначе не работает с двойной фамилией в формате "Ф"
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Склонение фамилий. (Вариант решения)
    #39855971
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hexcept, мои 5 копеек
кроме -- оглы,кызы:

встречаются еще отдельные слова
мужской пол:
угли
улы
ули
омар
оглу


женский пол:
кизи
гызы
кзы
кыры


список неперсонолизированных примеров отчеств:
Сопыхан Улы (м)
ФЕЙРУЗ Оглу (м)
Абделкарим Омар (м)
Равиль Углы (м)
Шамсадин Гызы (ж)
Олимжон Угли (м)
Идман Кыры (ж)
Исмаил Ксы (ж)
...
Рейтинг: 0 / 0
Склонение фамилий. (Вариант решения)
    #39856016
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushkaвстречаются еще отдельные словаЭто в казани? А за мкадьем жизнь есть?
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Склонение фамилий. (Вариант решения)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]