---- Function: dbo.fn_getfioaccusative(uuid)
---- DROP FUNCTION fn_getfioaccusative(uuid);
--CREATE OR REPLACE FUNCTION dbo.fn_GetFioAccusative("Uid" uuid)
--  RETURNS text AS
--$BODY$
--Declare Fam varchar(40);
--	Ima varchar(40);
--	Otc varchar(40);
--	ManLstLt varchar(40);
--	WmnLstLt varchar(40);
--	ManFamEnd varchar(40);
--	IiFamEnd varchar(40);
--	WmnFamEnd varchar(40);
--	Jud1FamEnd varchar(200);
--	Jud2FamEnd varchar(100);
--	Jud3FamEnd varchar(40);
--	FranceFam varchar(100);
--	LstLtIma varchar(40);
--	LstTwoIma varchar(40);
--	LstLtFam varchar(40);
--	LstTwoFam varchar(40);
--	LstTwoOtc varchar(40);
--	Processed int;
--	Sex varchar(40);
--	lDefisPos  int;
--	Vowels text;
--	Hissing text;
-- Begin
-- -- Процедура GetDativ склонения ФИО получателя в дательном падеже (кому?).  
---- Версия 2.1 исправленная. Обсуждение проекта также здесь: http://gramota.ru/forum/read.php?f=7&i=1217&t=1217  
---- Приведенный код может содержать ошибки, но Вы можете свободно использовать его на свой страх и риск.  
---- Тестирование продолжается. Присылайте и пишите свои отзывы и замечания. Спасибо всем откликнувшимся!  
---- Полезные ссылки:  
---- Особенности склонения фамилий и личных имен http://spravka.gramota.ru/surnames.html Отсюда взяты правила!  
---- Склонение личных имен в русском языке http://www.nazovite.ru/sklonenie  
---- Cловари русского языка для скачивания http://dicts.alphanet.org.ua/  
---- По последней ссылке можно скачать в т.ч. словарь фамилий familii.exe 2,160,669 байт (7 миллионов фамилий)  
---- Книга: 'Склонение фамилий и личных имен в русском литературном языке.'  
---- Автор: Калакуцкая Л.П., Издание: М. ; Наука 1984г, Страниц: 221  
---- Книга: 'Современные русские фамилии.'  
---- Автор: Суперанская А.В., Суслова А.В. Издание: М. ; Наука 1981г, Страниц: 176  
---- На с. 120-122 последнего издания приводятся русские фамилии на 'ой', 'ий', 'ый', без показателя (суффикса) 'ск', как в фамилии КрамСКой) 

--	select Into
--		Fam, Ima, Otc
--		p.LastName, p.FirstName, p.FatherName
--	from akuz.T_PATIENT p
--	where p.PatientID = "Uid";	

--	if char_length(Otc) < 3 
--	then return Fam || chr(32) || Ima || chr(32) || Otc; -- chr(32) - пробел
--	end if;

--	-- Список всех гласных букв русского алфавита (требуются для проверки букв, стоящих перед окончаниями сложных фамилий)  
--	Vowels := 'АЕЁИОУЭЫЮЯ';
--	-- Список шипящих букв, необходимых для правильного склонения фамилий, заканчивающихся на эта буква + 'ИЙ' или 'АЯ'  
--	Hissing := 'ЧШЩ';
--	-- Список последних букв, встречающихся в типичных мужских именах  
--	-- ГлеБ,СлаВ,ОлеГ,ЭдуарД(АльфреД),ГилядЖ,ЧингиЗ,МарК,МихаиЛ,ВадиМ,ИваН,ЮсуП,ВиктоР,БориС(ФеликС),ФилареТ(МараТ),ИосиФ,АристарХ  
--	ManLstLt := 'БВГДЖЗКЛМНПРСТФХ';
--	-- Список последних букв, встречающихся в типичных женских именах  
--	WmnLstLt := 'АЯЬ';  -- МаринА, АнастасиЯ, ИЯ (исключение), ЛюбовЬ  
--	-- Список окончаний мужских славянских (русских) фамилий. На -ов фамилии отцовы, на -ин фамилии мамины.  	
--	ManFamEnd := 'ЕВ ЁВ ИН ОВ ЫН';
--	-- Список окончаний мужских славянских (русских) фамилий, заканчивающихся на 'Й'  
--	-- Чисто русские фамилии без '-ск-': БлагОЙ,ТолстОЙ,БоровОЙ,БереговОЙ,ЛановОЙ,БроневОЙ,ДикИЙ,ГладкИЙ,ЛучшИЙ,ПоперечнЫЙ,...  
--	-- Существует ряд воспринимаемых неоднозначно фамилии ТопчИЙ, ПобожИЙ, БокИЙ, РудОЙ и т.п.,  
--	-- как имеющих окончания '-ий','-ой', и склоняющихся как прилагательные (ТопчИЙ->ТопчЕМУ /жен.ТопчЕЙ/)  
--	-- или как с нулевым окончанием и склонением по образцу существительных (ТопчИЙ->ТопчИЮ /жен.ТопчИЙ/)  
--	IiFamEnd := 'ИЙ ОЙ ЫЙ';  -- ГорькИЙ (ЖириновскИЙ), ДонскОЙ (МеньшОЙ, РябОЙ), ПоперечнЫЙ (СытЫЙ)  
--	-- Список окончаний женских славянских фамилий  
--	WmnFamEnd := 'АЯ ВА НА';  -- ПодольскАЯ, РубиноВА, КлепиниНА  
--	-- СПИСОК N 1 ИНОСТРАННЫХ ФАМИЛИЙ, ОКАНЧИВАЮЩИХСЯ НА СОГЛАСНЫЙ ЗВУК, ДОПОЛНЯЮЩИХСЯ БУКВОЙ 'У' У МУЖЧИН  
--	-- БессарАБ,КостопрАВ,КимчАГ,ТихолАЗ,СобчАК(КолчАК,ПастернАК),ХейердАЛ,КипермАН(НеждАН),НовАР,НикитАС,БАХ,КАЦ,  
--	-- ВагнЕР(ГомЕР),СервантЕС,АврЕХ,СаркИЗ,ТютюннИК(ТаможеннИК),КИМ,ЭдИП,СабонИС,СмИТ,ЛифшИЦ,МаслиевИЧ,ЭЙН,ВоЛК,МаксвеЛЛ,  
--	-- БраМС,ЛантиНГ,ГельфаНД,СаркисьяНЦ,МорОЗ,НиксОН(КлинтОН),РуссОС,кОХ,РезерфоРД,ОленбеРГ,НаймаРК,ЭйнгоРН,ПреСС,ЭрнСТ,МокрозУБ,  
--	-- ЦингаУЗ,ШевчУК,СтУЛ,ЦикУН,МацкявичУС,БУШ,ЛинколЬН,ТизенголЬТ,ПелЬШ,БаландЮК,КЮН,ТретьЯК,ШамоЯН,МотЯС (пока 54 штуки)  	
--	Jud1FamEnd := 'АБ АВ АГ АЗ АК АЛ АН АР АС АХ АЦ ЕР ЕС ЕХ ИЗ ИК ИМ ИП ИС ИТ ИЦ ИЧ ЙН ЛК ЛЛ МС НГ НД НЦ ОЗ ОН ОС ОХ РД РГ РК РН СС СТ УБ УЗ УК УЛ УН УС УШ ЬН ЬТ ЬШ ЮК ЮН ЯК ЯН ЯС';
--	-- СПИСОК СКЛОНЯЕМЫХ НЕ РУССКИХ ФАМИЛИЙ N 2, заканчивающихся на гласные звуки А->Е и Я->Е, с предшествующей согласной  
--	-- за исключением указанных ниже несклоняемых фамилий французского происхождения. Например:  
--	-- ДзюБА,ГулыГА(МаГА,искл.ДеГА),НегоДА,ДюДЯ,ГамалЕЯ,ГлинКА(ДейнеКА,искл.ЛюКА),ИгЛА,,ЗозуЛЯ,КайМА(КарМА),КуралеНЯ,  
--	-- МазеПА(искл.ПетиПА),ГализдРА(искл.ГамарРА),ОпРЯ,ТупоТА,ВаренуХА,ЛисиЦА,ОлеША  		 
--	Jud2FamEnd := 'БА ГА ДА ДЯ ЕЯ КА ЛА ЛЯ МА НЯ ПА РА РЯ ТА ХА ЦА ША';  -- ... все на 'А' и 'Я' (здесь можно не пополнять)  
--	-- СПИСОК НЕ РУССКИХ ФАМИЛИЙ N 3 (фамилии, заканчивающиеся на 'А[Й]'->'Ю', '[Ь]'->'Ю' и 'У[Й]'->'Ю' у мужчин)    
--	-- МаклАЙ,ЛебеДЬ,ДруЗЬ,КоваЛЬ(ВрубеЛЬ,ГогоЛЬ,РозентаЛЬ,ЧерчилЛЬ),ОболоНЬ,ХемингуЭЙ,ХалУЙ		
--	Jud3FamEnd := 'АЙ ДЬ ЕЙ ЗЬ ЛЬ НЬ ЭЙ УЙ';  -- ...  ЕЙ (кроме ВоробЕЙ, СоловЕЙ), а на 'Ь' - любые (здесь можно не пополнять)  
--	-- Несклоняемые фамилии французского происхождения: ДеГА, ЛюКА, ДюМА (ТоМА, ФерМА), ПетиПА и ГамарРА и др.   	
--	FranceFam := 'ДЕГА ЛЮКА ДЮМА ТОМА ФЕРМА ПЕТИПА ГАМАРРА ЗОЛЯ ТРУАЙА' || chr(32);
	
--	-- Для проведения анализа при склонении нам потребуются:  
--	LstLtIma := Upper(Right(Ima,1));  -- Последняя буква имени  
--	LstTwoIma := case when char_length(Ima) > 1 then Upper(Right(Ima,2)) else Upper(Ima) end;  -- Последние две буквы имени  
--	LstLtFam := Upper(Right(Fam,1));  -- Последняя буква фамилии  
--	LstTwoFam := Upper(Right(Fam,2));  -- Последние две буквы фамилии  
--	LstTwoOtc := Upper(Right(Otc,2)); -- Последние две буквы отчества  
--	Processed := 0;  -- Признак того, что фамилия и имя еще не обработаны  
--	Sex := '?';  -- Пол: 'М' - мужской, 'Ж' - женский, '?' - не определен достоверно.  
----raise notice 'LstLtIma = %', LstLtIma;
----raise notice 'LstLtIma = %', LstLtIma;
--	-- Синтаксический разбор мужских и женских отчеств  
--	-- И одновременная попытка определения пола человека  
--	-- Также однозначно просклоняем отчество. Здесь нет трудностей.  
--	If LstTwoOtc ='ИЧ' --Если отчество заканчивается на буквы 'ИЧ'  
--	then	Otc := Upper(Left(Otc,1)) || Lower(substring(Otc from 2 for (Char_Length(Otc) - 1)))  || 'у'; --(даже Савельичу!)  
--		Sex := 'М';
--	end if;
--	If Upper(Right(Otc, 1)) = 'А' -- Если отчество заканчивается на букву 'А'  
--	then	Otc := Upper(Left(Otc, 1)) || Lower(substring(Otc from 2 for (Char_Length(Otc) - 2))) || 'е';
--		Sex := 'Ж';
--	end if;
--	If Sex = '?'  
--	then
--	-- 'оглы' (для мужчин) и 'кызы' (для женщин) не склоняются и могут писаться  
--	-- как через черточку, так и отдельно от первой части отчества (однозначно определяют пол),  
--	-- то есть ФИО может состоять из 4 слов.  
--		If strpos(Upper(Otc), 'ОГЛЫ') <> 0
--		then	Sex := 'М';
--		Else
--			If strpos(Upper(Otc), 'КЫЗЫ') <> 0
--			then	Sex := 'Ж';
--			end if;
--		end if;
--	end if;
--	If Sex = '?'  
--	then
--	-- 'оглы' (для мужчин) и 'кызы' (для женщин) не склоняются и могут писаться  
--	-- как через черточку, так и отдельно от первой части отчества (однозначно определяют пол),  
--	-- то есть ФИО может состоять из 4 слов.  
--		if (Otc = '')
--		then
--			If upper(right(Fam, 1)) = 'В'
--			then	Sex := 'М';
--			Else
--				If upper(right(Fam, 1)) = 'А'
--				then	Sex := 'Ж';
--				end if;
--			end if;
--		end if;
--	end if;
--	--select @Sex
--	-- Кто знает как правильно обрабатывать 'ОГЛЫ', допишите свой код здесь ...  

--	-- Синтаксический разбор мужских фамилий и имен  
--	-- Если фамилия заканчивается на 'ЕВ','ЁВ','ИН','ОВ','ЫН','ИЙ','ОЙ','ЫЙ'  
--	If strpos(ManFamEnd, LstTwoFam) <> 0 OR strpos(IiFamEnd, LstTwoFam) <> 0
--	then 
--		If Sex = 'М'  -- Если обрабатывается мужчина  
--		then
--			Processed = 1; -- Признак того, что фамилия и имя уже обработаны  
--			-- Обработка мужской фамилии, заканчавающихся на 'Й' весьма разнообразен и полон исключений  
--			-- ПодольскИЙ, ВИЙ, ОкИЙ, БокИЙ, ЭдипИЙ, ЛенскИЙ, ВислоБокИЙ, СинеокИЙ, ГлубокИЙ, ТолстОЙ, СытЫЙ, ВиднЫЙ  
--			If strpos(IiFamEnd, LstTwoFam) <> 0  
--			then
--			-- Подобрано эмпирически, что фамилии на 'ИЙ' длиной от 1 до 6, должны склоняться как исключение 'БокИЙ'  
--			-- Причем не помогает анализ предшествующей гласной. Так [БокИЙ] -> [БокИЮ], но [ВислоБокИЙ] -> [ВислоБокОМУ]  
--			-- Предполагаем, что короткой фамилии ЭнскИЙ не существует, иначе она будет у нас склоняться неверно!  
    
--			-- ПРАВИЛО РУССКОГО ЯЗЫКА: Фамилии с формальным показателем (суффиксом) -ск- (ДостоевСКий) склоняются  
--			-- в мужском и женском роде и во множественном числе как прилагательные.  
--				If LstTwoFam = 'ИЙ' AND Char_Length(Fam) < 6  -- ВИЙ, ОкИЙ, БокИЙ  ([ИЙ]->[ИЮ])  
--				then	Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 2))) || 'ю';
--				Else  
--				-- Необходимо обработать также случай [ИЙ]->[ЕМУ], помимо наиболее распространенного [ИЙ]->[ОМУ].  
--				-- Например [ПодьячИЙ]->[ПодьячЕМУ], [ЛучшИЙ]->[ЛучшЕМУ], [СмотрящИЙ]->[СмотрящЕМУ]  
--					If strpos(Upper(substring(Fam from (Char_Length(Fam)-2) for 1)), Hissing) <> 0 
--					then	Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam)-3))) || 'ему';
--					Else
--						Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam)-3))) || 'ому';
--					end if; 
--				end if;
--			Else  -- Все типично русские мужские фамилии склоняются по этой строке: 
--				Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam)-1))) || 'у';
--			end if;
--			--------------------------------------- 
--			-- Процедура обработки мужского имени  
--			If strpos(ManLstLt, LstLtIma) <> 0   
--			then
--				Ima := 	CASE	WHEN Char_Length(Ima) = 1 THEN Upper(Ima)  
--						WHEN Upper(Ima) = 'ЛЕВ' THEN Upper(Left(Ima, 1)) || 'ьву'    ---- Если Лев, то 'ЕВ'->'ЬВУ'  
--						WHEN LstTwoIma = 'ЕЛ' THEN Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 3))) || 'лу'     -- Если ПавЕЛ, то убираем коренную гласную 'Е' ('ЕЛ'->'ЛУ')  
--						ELSE Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 1))) || 'у' 
--					end;  -- ИваН 
--			Else
--				Ima :=  Case	WHEN Char_Length(Ima) = 1 THEN Ima      
--						WHEN (LstLtIma = 'А') OR (LstLtIma = 'Я') THEN Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 2))) || 'е'    -- НикитА, КузьмА, ЛукА, ФомА, СаввА, ИлиЯ, ИльЯ  
--						WHEN (LstLtIma = 'Й') OR (LstLtIma = 'Ь') THEN Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 2))) || 'ю'  
--						---- АлексеЙ,АнатолиЙ,АндреЙ,АркадиЙ,АрсениЙ,АртемиЙ,ВалериЙ,ВасилиЙ,ВиталиЙ,ГеннадиЙ,ГеоргиЙ,ГригориЙ,ДмитриЙ,  
--						---- ЕвгениЙ,ЗиновиЙ,ИннокентиЙ,ЛаврентиЙ,МатвеЙ,МефодиЙ,МоисеЙ,НиколаЙ,СергеЙ,ТимофеЙ,ФеодосиЙ,ЮлиЙ,ЮриЙ  
--						---- ГаделЬ,ГэмилЬ,ДжалилЬ,РафаэлЬ,ИгорЬ,КамилЬ,НаилЬ,ЛазарЬ,РавилЬ,РаилЬ,РасилЬ,ФаилЬ,ХалилЬ,ШамилЬ,ЭмилЬ,ЯлилЬ,ЯмилЬ  
--						ELSE ''
--					end;  
--				---- ---------------------------------
--			end if; -- Sex='М'  
--		end if;
--	end if;  
--	-- select @Fam, @Ima, @Otc
--	-- Синтаксический разбор женских фамилий и имен  
--	If strpos(WmnFamEnd, LstTwoFam) <> 0  -- Если фамил. зак-тся на 'АЯ','ВА','НА',проверим посл.букву имени  
--	then 
--		If Sex = 'Ж'  -- Если обрабатывается женщина  
--		then
--			Processed := 1;  -- Признак того, что фамилия и имя уже обработаны  
--			-- Обработка женской фамилии  
--			If LstTwoFam = 'АЯ'  -- Касат[АЯ->ОЙ], Гурцк[АЯ->ОЙ] но Лучш[АЯ->ЕЙ] и Цхак[АЯ->АЯ]  
--			then
--			-- Необходимо обработать также случай [АЯ]->[ЕЙ], помимо наиболее распространенного [АЯ]->[ОЙ].  
--			-- Например [ПодьячАЯ]->[ПодьячЕЙ], [ЛучшАЯ]->[ЛучшЕЙ], [СмотрящАЯ]->[СмотрящЕЙ]  
--				If strpos(Hissing, Upper(substring(Fam from (Char_Length(Fam) - 2) for 1))) <> 0
--				then
--					Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 3))) || 'ей';
--				Else
--					If NOT(Upper(Right(Fam, 4)) = 'АКАЯ') -- Грузинская фамилия типа 'Цхакая'  
--					then	Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 3))) || 'ой';
--					end if;
--				end if;
--			Else	-- Самый массовый случай русских женских фамилий, например, КольцоВ[А->ОЙ]  
--				-- Но сюда могут 'закрасться' грузинские женские фамилии, типа 'Окуджава', проверим дополнительно!  
--				If Upper(Right(Fam, 3)) = 'АВА' 
--				then	
--					Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 2))) || 'е';
--				Else  
--					Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 2))) || 'ой';
--				end if;
--			end if; 
--			--------------------------------------------------------------  
--			-- Процедура обработки женского склоняемого имени,  
--			-- т.е. не такого как несклоняемые имена: Жаклин, Каринэ, Нелли и т.п.  
--			If strpos(WmnLstLt, LstLtIma) <> 0 AND Char_Length(Ima) > 1 -- Если имя зак-тся на 'А','Я' или 'Ь'  
--			then
--				If Upper(Right(Ima, 2)) = 'ИЯ'  -- Имя оканчивается на -ия,  
--				then
--					If Upper(Ima) = 'ИЯ'  
--					then
--						-- Мою супругу зовут 'Ия' (в переводе с греч.'Фиалка'). Это 'особый' случай!  
--						Ima := 'Ие';
--					Else  
--						-- Если имя не Ия, то -ия заменяется на -ии, например, [ЛилИЯ]->[ЛилИИ]  
--						Ima := Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 3))) || 'ии';
--					end if;
--				Else
--					If LstLtIma <> 'Ь'  -- СветланА, ДарьЯ  
--					then
--						Ima := Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 2))) || 'е';
--					Else  -- ЛюбовЬ, НинелЬ  
--						Ima := Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 2))) || 'и';
--					end if;
--				end if;
--			end if;
--			----------------------------------------- 
--		end if; --- Sex='Ж'  
--	end if;
--	--select @Fam, @Ima, @Otc  

--	-- Синтаксический разбор украинских и некоторых других фамилий и имен на 3-ем проходе  
--	If Processed = 0  -- Если фамилия и имя еще не обработаны
--	then
--	---- Вполне достоверно утверждение с сайта http://community.livejournal.com/ru_programming/478385.html#comments,  
--	---- что женские фамилии, оканчивающиеся на согласный звук и мягкий знак не склоняются, а фамилии,  
--	---- оканчивающиеся на гласный звук склоняются не зависимо от пола, с учетом следующих двух правил:  
    
--	---- ПРАВИЛО 1: Все фамилии, пишущиеся с е, э, и, ы, у, ю на конце, могут быть только несклоняемыми.  
--	---- Таковы фамилии: ДоДЕ, МавроДИ(КеннеДИ,ГанДИ), АмаДУ, ОрджоникидЗЕ, ШабрИЕ, МеЙЕ, НасоновсКИ,  
--	---- ЧаушесКУ, НобиЛЕ(КараджаЛЕ,ТарЛЕ), ЛюлЛИ(ШелЛИ,РуставеЛИ), НеедЛЫ, КаМЮ, АртмаНЕ,   
--	---- АхвледиаНИ(МодильяНИ,ЧабукиаНИ), ЛаНУ, КорНЮ, НавОИ, ШОУ, ЛансеРЕ, ХараРИ(ГретРИ), НеРУ,  
--	---- МегРЭ, МюсСЕ, ДебюсСИ(ГолсуорСИ), ГёТЕ(ОрбакайТЕ), ДжусойТЫ, МанЦУ, ГрамШИ, БоссЮЭ, ФурЬЕ,...  
    
--	---- ПРАВИЛО 2: Все фамилии, оканчивающиеся на а, которому предшествуют гласные звуки (чаще всего у или и), несклоняемы:  
--	---- Галуа, Моруа, Делакруа, Моравиа, Эриа, Эредиа, Гулиа.  
    
--	---- ПРАВИЛО 3: Несклоняемы фамилии французского происхождения с ударением на конце: ЗоЛЯ, ТруаЙА.   
--	---- Все прочие фамилии на '-я' склоняемы; таковы ГоловНЯ, ЗозуЛЯ, СырокомЛЯ, ГамалЕЯ, ГоЙЯ, ШенгелАЯ,  
--	---- ДанелИЯ, БерИЯ, БакерИЯ, ИверИЯ.   
--	---- Грузинские фамилии оказываются склоняемыми или несклоняемыми в зависимости от того, в каком виде  
--	---- конкретная фамилия заимствована русским языком: фамилии на -ия склоняемы (Данелия), на -иа - несклоняемы (Гулиа).  
    
--	---- Нерусский список N2 (Jud2FamEnd) фамилий, заканчивающихся на гласные звуки 'А', 'Я' с предшествующей согласной,  
--	---- кроме исключений, состоящих из фамилий французского происхождения (FranceFam), таких как ФерМА и т.п.  
    
--		If ((LstLtFam = 'А' AND LstTwoFam <> 'ИА' AND LstTwoFam <> 'УА') OR LstLtFam = 'Я') AND 
--			LstLtFam <> 'Е' AND LstLtFam <> 'Э' AND LstLtFam <> 'И' AND LstLtFam <> 'Ы' AND LstLtFam <> 'У' AND LstLtFam <> 'Ю' AND  
--			strpos(FranceFam, Upper(Fam) || chr(32)) = 0
--		then
--			If LstTwoFam = 'ИЯ'  -- Склоняем грузинские фамилии на 'ИЯ'. Нам это разрешает делать правило!  
--			then
--				Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 2))) || 'и';
--			Else  -- Склоняем остальные склоняемые фамилии, заканчивающиеся на гласную из списка Jud2FamEnd  
--				Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 2))) || 'е';
--			end if;
--		end  if;
--		if Sex = 'М'  -- Обрабатываем мужчину  
--		-- Нерусский список N1 (Jud1FamEnd)  
--		then
--			If strpos(Jud1FamEnd, LstTwoFam) <> 0  
--			then
--				Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 1))) || 'у';
--			end if; 
--			-- Нерусский список N3 (Jud3FamEnd)  
--			If Upper(Fam) = 'СОЛОВЕЙ' OR Upper(Fam) = 'ВОРОБЕЙ'  -- СОЛОВЕЙ, ВОРОБЕЙ (исключение)
--			then
--				Fam := Upper(Left(Fam,1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 3))) || 'ью';
--			Else  
--				-- Список Jud3FamEnd ++  
--				If LstTwoFam = 'АЙ' OR LstTwoFam = 'ЕЙ' OR LstTwoFam = 'УЙ' OR LstTwoFam = 'ЭЙ' OR LstLtFam = 'Ь'  
--				then
--					Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 2))) || 'ю';
--				end if; 
--			end if; 
--			If LstTwoFam = 'ЕЦ'  
--			then
--			---- Необходимо определять согласная или гласная буква находится перед 'ЕЦ'  
--			---- МогилеВец, БоРец, КоБец (подвид 1 с предшествующим согласным звуком) [ЕЦ]->[ЦУ],  
--			---- БОец, КоломИец (подвид 2 с предшествующим гласным звуком /Vowels/)   [ЕЦ]->[ЙЦУ]  
--				If strpos(Vowels, Upper(substring(Fam from (Char_Length(Fam) - 2) for 1))) = 0  
--				then
--					Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 3))) || 'цу';
--				Else 
--					Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 3))) || 'йцу';
--				end if;
--			end if;
--			---- КлюченОК,КовалЕнОК,МАзОК,МазурЕнОК,МазУрОК,МакарЕнОК,МакеЕнОК,МалашОнОК,МаскОлОК [ОК->КУ]  
--			---- БаЙрОК[+У],БайЧтОК[+У],БлОК[+У],КоЛеОК[+У],КоЛтОК[+У],КосТлОК[+У],МаЛоОК[+У],ТененШтОК[+У],ТеСмОК[+У]  
--			---- КоРшОК (МакАшОК, МалАшОК, ТерЕшОК, ТимОшОК) [ОК->КУ] (перед ОК стоит шипящая Ш)  
--			If LstTwoFam = 'ОК'  
--			then
--			---- 'ОК' склоняем только у мужчин. Могут быть 2 случая:  
--			---- 1 случай: КлюченОК [ОК->КУ]  
--			---- 2 случай: БлОК [ОК->ОКУ]  
--			---- Подмеченная закономерность (попробуйте опровергнуть - вряд ли удастся!):  
--			---- Если 3-я с конца буква фамилии на 'ОК' есть буква 'Ш' или 4-я с конца буква гласная, то [ОК->КУ]  
--				If Char_Length(Fam) > 3 AND (Upper(substring(Fam from (Len(Fam) - 3) for 1)) = 'Ш' OR strpos(Vowels, Upper(substring(Fam from (Char_Length(Fam) - 4) for 1))) <> 0)  
--				then
--					Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 3))) || 'ку';
--				Else  --[ОК->ОКУ]  
--					Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Char_Length(Fam) - 1))) || 'у';
--				end if; 
--			end if;
--			---- 'ЕК' склоняем только у мужчин.  
--			---- ЗДЕСЬ МЕНЯ ТЕРЗАЮТ СИЛЬНЫЕ СОМНЕНИЯ, НО ВЕСЬМА ПОХОЖЕ НА ТО, ЧТО ВЕЗДЕ ДЕЛАТЬ НУЖНО ИМЕННО ТАК:  
--			---- КраснОщЕК[+У],КрЯчЕК[+У]. (?) ВанИчЕК[+У],ВасИлЕК[+У],КрЮчЕК[+У],МалЫшЕК[+У] (?)  
--			If LstTwoFam = 'ЕК'
--			then	
--				Fam := Upper(Left(Fam, 1)) || Lower(substring(Fam from 2 for (Len(Fam) - 1))) || 'у';
--			end if; 
--			----------------------------------------------  
--			--------------- Процедура обработки мужского имени  
--			If strpos(ManLstLt, LstLtIma) <> 0  
--			then
--				Ima :=	Case	when Char_Length(Ima) = 1 
--						Then Upper(Ima)
--						when Upper(Ima) = 'ЛЕВ'   -- Если Лев, то 'ЕВ'->'ЬВУ'  
--						then Upper(Left(Ima, 1)) || 'ьву'  
--						when LstTwoIma = 'ЕЛ' --Если ПавЕЛ, то убираем коренную гласную 'Е' ('ЕЛ'->'ЛУ')
--						then Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 3))) || 'лу'  
--						else Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 1))) || 'у' 
--					end;
--			Else
--				Ima :=	Case	when Char_Length(Ima) = 1
--						Then Upper(Ima)
--						when LstLtIma = 'А' OR LstLtIma = 'Я'  -- НикитА, КузьмА, ЛукА, СаввА, ИлиЯ, ИльЯ  
--						then Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 2))) || 'е'
--						------ АлексеЙ,АнатолиЙ,АндреЙ,АркадиЙ,АрсениЙ,АртемиЙ,ВалериЙ,ВасилиЙ,ВиталиЙ,ГеннадиЙ,ГеоргиЙ,ГригориЙ,ДмитриЙ,  
--						---- ЕвгениЙ,ЗиновиЙ,ИннокентиЙ,ЛаврентиЙ,МатвеЙ,МефодиЙ,МоисеЙ,НиколаЙ,СергеЙ,ТимофеЙ,ФеодосиЙ,ЮлиЙ,ЮриЙ  
--						---- ГаделЬ,ГэмилЬ,ДжалилЬ,РафаэлЬ,ИгорЬ,КамилЬ,НаилЬ,ЛазарЬ,РавилЬ,РаилЬ,РасилЬ,ФаилЬ,ХалилЬ,ШамилЬ,ЭмилЬ,ЯлилЬ,ЯмилЬ  
--						when LstLtIma = 'Й' OR LstLtIma = 'Ь'
--						then Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 2))) || 'ю'
--						else ''
--					end;
--			end if;
--		end if;
--		------------------------------------  
--		if Sex = 'Ж'  -- Обрабатываем женщину 
--		then
--		---- Не русскую женскую фамилию склонять не надо  
--		----------------------------------------------------------------------------------------------------------------------------  
--		---- Процедура обработки женского склоняемого имени,  
--		---- т.е. не такого как несклоняемые имена: Жаклин, Каринэ, Нелли и т.п.  
--			If strpos(WmnLstLt, LstLtIma) <> 0 AND Char_Length(Ima) > 1 -- Если имя зак-тся на 'А','Я' или 'Ь'  
--			then 
--				If Upper(Right(Ima, 2)) = 'ИЯ'  -- Имя оканчивается на -ия (ЛилИЯ),  
--				then
--					If Upper(Ima) = 'ИЯ'  
--					then
--						-- Мою супругу зовут 'Ия' (в переводе с греч.'Фиалка'). Это 'особый' случай!  
--						Ima := 'Ие';
--					Else  
--						-- Если имя не Ия, то -ия заменяется на -ии, например, [ЛилИЯ]->[ЛилИИ]  
--						Ima := Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 3))) || 'ии';
--					end if;
--				Else  
--					If LstLtIma <> 'Ь'  -- СветланА, ДарьЯ
--					then
--						Ima := Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 2))) || 'е';
--					Else  -- ЛюбовЬ, НинелЬ  
--						Ima := Upper(Left(Ima, 1)) || Lower(substring(Ima from 2 for (Char_Length(Ima) - 2))) || 'и';
--					end if;
--				end if;
--			end if;
--		--------------------------------------------------------------------------------------------------------------------------   
--		-- Обработка фамилий пишущихся через дефис (Миклухо-Маклай, Кох-Татаренко, ...)  
--			lDefisPos := strpos(Fam, '-');
--			If lDefisPos > 1
--			then
--				Fam := Left(Fam, lDefisPos) || Upper(substring(Fam from (lDefisPos + 1) for 1)) || Right(Fam, Char_Length(Fam) - lDefisPos - 1);
--			end if;
--		-- Формируем фамилию, имя и отчество в дательном падеже  
--		--Return AllT(Fam + Space(1) + Ima + Space(1) + Otc)  
--		end if;
--	end if;
--	return coalesce(Fam || chr(32),'') || coalesce(Ima || chr(32), '') || coalesce(Otc, '');	
--END $BODY$
--  LANGUAGE plpgsql IMMUTABLE
--  COST 100;
--ALTER FUNCTION dbo.fn_getfioaccusative(uuid)
--  OWNER TO postgres;
