Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.217.228] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
нужно делать "сумму прописью".
знаю, что таких процедур уже понаписано навалом. киньте ссылку, кто знает |
Сообщ.
#2
,
|
|
|
udf ку напиши ... если сие поддерживается в оракле
|
Сообщ.
#3
,
|
|||
|
Попробуй это ******************************************* Попробуй это --- ----------------------------------------------------------------- CREATE OR REPLACE FUNCTION sum2str(v_sum number) RETURN varchar2 IS -- Сумма прописью /Maksim F. Sharapov 2003/ type mass is table of varchar2(13) index by binary_integer; type rec is record ( a varchar2(12), b varchar2(12), c varchar2(12), d varchar2(12), e varchar2(12), k varchar2(12)); type razr is table of rec index by binary_integer; m1 mass; m1a mass; m11 mass; m10 mass; m100 mass; r razr; c varchar2(255); n number; k number; i number; again boolean; BEGIN --********************************** Заполняем массивы данными m1(0):=''; m1(1):='один '; m1(2):='два '; m1(3):='три '; m1(4):='четыре '; m1(5):='пять '; m1(6):='шесть '; m1(7):='семь '; m1(8):='восемь '; m1(9):='девять '; -------------------------------- m1a(0):=''; m1a(1):='одна '; m1a(2):='два '; m1a(3):='три '; m1a(4):='четыре '; m1a(5):='пять '; m1a(6):='шесть '; m1a(7):='семь '; m1a(8):='восемь '; m1a(9):='девять '; -- от 11 до 19 m11(0):=''; m11(1):='одиннадцать '; m11(2):='двенадцать '; m11(3):='тринадцать '; m11(4):='четырнадцать '; m11(5):='пятнадцать '; m11(6):='шестнадцать '; m11(7):='семнадцать '; m11(8):='восемнадцать '; m11(9):='девятнадцать '; -- 2 разряд m10(0):=''; m10(1):='десять '; m10(2):='двадцать '; m10(3):='тридцать '; m10(4):='сорок '; m10(5):='пятьдесят '; m10(6):='шестьдесят '; m10(7):='семьдесят '; m10(8):='восемьдесят '; m10(9):='девяносто '; -- 3 разряд m100(0):=''; m100(1):='сто '; m100(2):='двести '; m100(3):='триста '; m100(4):='четыреста '; m100(5):='пятьсот '; m100(6):='шестьсот '; m100(7):='семьсот '; m100(8):='восемьсот '; m100(9):='девятьсот '; ------------------- r(0).a:='рублей '; r(1).a:='рубль '; r(2).a:='рубля '; r(3).a:='рубля '; r(4).a:='рубля '; r(5).a:='рублей '; r(6).a:='рублей '; r(7).a:='рублей '; r(8).a:='рублей '; r(9).a:='рублей '; ------------------- r(0).b:='тысяч '; r(1).b:='тысяча '; r(2).b:='тысячи '; r(3).b:='тысячи '; r(4).b:='тысячи '; r(5).b:='тысяч '; r(6).b:='тысяч '; r(7).b:='тысяч '; r(8).b:='тысяч '; r(9).b:='тысяч '; ------------------------- r(0).c:='миллионов '; r(1).c:='миллион '; r(2).c:='миллиона '; r(3).c:='миллиона '; r(4).c:='миллиона '; r(5).c:='миллионов '; r(6).c:='миллионов '; r(7).c:='миллионов '; r(8).c:='миллионов '; r(9).c:='миллионов '; --------------------------- r(0).d:='миллиардов '; r(1).d:='миллиард '; r(2).d:='миллиарда '; r(3).d:='миллиарда '; r(4).d:='милииарда '; r(5).d:='миллионов '; r(6).d:='миллионов '; r(7).d:='миллионов '; r(8).d:='миллионов '; r(9).d:='миллионов '; ------------------------------ r(0).e:=''; r(1).e:=''; r(2).e:=''; r(3).e:=''; r(4).e:=''; r(5).e:=''; r(6).e:=''; r(7).e:=''; r(8).e:=''; r(9).e:=''; --- r(0).k:='копеек '; r(1).k:='копейка '; r(2).k:='копейки '; r(3).k:='копейки '; r(4).k:='копейки '; r(5).k:='копеек '; r(6).k:='копеек '; r(7).k:='копеек '; r(8).k:='копеек '; r(9).k:='копеек '; -- ************************************* Печать копеек n:=round(v_sum,2); c := substr(to_char(n,'999999999999999999.99'),length(to_char(n,'999999999999999999.99'))-1,2); k:=to_number©; if mod(k,100)=0 then c:='ноль '||r(0).k; else if mod(k,100)>10 and mod(k,100)<20 then c:=r(0).k; c:=m11(mod(k,10))||c; else c:=r(mod(k,10)).k; c:=m1a(mod(k,10))||c; c:=m10(mod(trunc(k/10,0),10))||c; end if; end if; -- ************************************* Печать суммы ********** n:=trunc(n,0); if n=0 then c:='ноль '||r(0).a||c; else i:=1; again:=true; while again loop if mod(n,100)>10 and mod(n,100)<20 then c:=r(0).a||c; c:=m11(mod(n,10))||c; else c:=r(mod(n,10)).a||c; if i=2 then c:=m1a(mod(n,10))||c; else c:=m1(mod(n,10))||c; end if; c:=m10(mod(trunc(n/10,0),10))||c; end if; c:=m100(mod(trunc(n/100,0),10))||c; n:=trunc(n/1000,0); if n=0 then again:=false; end if; for j in 0..9 loop if i=1 then r(j).a:=r(j).b; end if; if i=2 then r(j).a:=r(j).c; end if; if i=3 then r(j).a:=r(j).d; end if; if mod(n,1000)=0 then r(j).a:=r(j).e; end if; end loop; i:=i+1; end loop; end if; return c; END; ---******************************************* |