Beispiel Betrag in Worten im Formular

 

// Priv. Prozedur p_BetragInPolnisch --- BT 10.08.2005

//

// Beschreibung:

//

//

//

CREATE Function p_BetragInPolnisch (
  in in_ZiffernVorkomma char(15),
  in in_ZiffernNachkomma char(15),
  in in_Vorzeichen integer,
  in in_Dezimalstellen integer,
  in in_Betrag numeric(15,6)
 )
 RETURNS char(500)
BEGIN
DECLARE text char(200);
declare hilf_text char(500);
declare hunderttausender char(1);
declare zehntausender char(1);
declare tausender char(1);
declare hunderter char(3);
declare zehner char(2);
declare einer char(1);
declare nachkomma char(500);
declare local temporary table zt
 ( zt char(40),
   z integer
 ) on commit delete rows ;
 insert into zt ( z, zt ) values ( 0, '' );
 insert into zt ( z, zt ) values ( 1, 'jeden' );
 insert into zt ( z, zt ) values ( 2, 'dwa' );
 insert into zt ( z, zt ) values ( 3, 'trzy' );
 insert into zt ( z, zt ) values ( 4, 'cztery' );
 insert into zt ( z, zt ) values ( 5, 'plec' );
 insert into zt ( z, zt ) values ( 6, 'szesc' );
 insert into zt ( z, zt ) values ( 7, 'siedem' );
 insert into zt ( z, zt ) values ( 8, 'osiem' );
 insert into zt ( z, zt ) values ( 9, 'dziewiec' );
 insert into zt ( z, zt ) values ( 10, 'dziesiec' );
 insert into zt ( z, zt ) values ( 11, 'jedenascie' );
 insert into zt ( z, zt ) values ( 12, 'dwanascie' );
 insert into zt ( z, zt ) values ( 13, 'trzynascie' );
 insert into zt ( z, zt ) values ( 14, 'czternascie' );
 insert into zt ( z, zt ) values ( 15, 'pietnascie' );
 insert into zt ( z, zt ) values ( 16, 'szesnascie' );
 insert into zt ( z, zt ) values ( 17, 'siedemnascie' );
 insert into zt ( z, zt ) values ( 18, 'osiemnascie' );
 insert into zt ( z, zt ) values ( 19, 'dziewietnascie' );
 insert into zt ( z, zt ) values ( 20, 'dwadziescia' );
 insert into zt ( z, zt ) values ( 30, 'trzydziesci' );
 insert into zt ( z, zt ) values ( 40, 'czterdziesci' );
 insert into zt ( z, zt ) values ( 50, 'piecdziesiat' );
 insert into zt ( z, zt ) values ( 60, 'szescdziesiat' );
 insert into zt ( z, zt ) values ( 70, 'siedemdziesiat' );
 insert into zt ( z, zt ) values ( 80, 'osiemdzieslat' );
 insert into zt ( z, zt ) values ( 90, 'dziewiecdziesiat' );
 insert into zt ( z, zt ) values ( 100, 'sto' );
 insert into zt ( z, zt ) values ( 200, 'dwiescie' );
 insert into zt ( z, zt ) values ( 300, 'trzysta' );
 insert into zt ( z, zt ) values ( 400, 'czterysta' );
 insert into zt ( z, zt ) values ( 500, 'piecset' );
 insert into zt ( z, zt ) values ( 600, 'szescset' );
 insert into zt ( z, zt ) values ( 700, 'siedemset' );
 insert into zt ( z, zt ) values ( 800, 'osiemset' );
 insert into zt ( z, zt ) values ( 900, 'dziewiecset' );
 insert into zt ( z, zt ) values ( 1000, 'tysiak' );
 insert into zt ( z, zt ) values ( 1000000, 'milion' );
 insert into zt ( z, zt ) values ( 2000000, 'miliony' );
-- insert into zt ( z, zt ) values ( 0, '' );
  set text = NULL;
  select zt into text from zt where z = in_ZiffernVorkomma ;
  if text is NULL then
    if length ( in_ZiffernVorkomma ) = 2 then
      set zehner = substring( in_ZiffernVorkomma, 1, 1 )||'0';
      set einer  = substring( in_ZiffernVorkomma, 2, 1 );
      select zt||' '||
        (select zt from zt where z = einer) into text from zt where z = zehner ;
    end if;
    if length ( in_ZiffernVorkomma ) = 3 then
      set hunderter = substring( in_ZiffernVorkomma, 1, 1 )||'00';
      set zehner    = substring( in_ZiffernVorkomma, 2, 1 )||'0';
      set einer     = substring( in_ZiffernVorkomma, 3, 1 );
      select zt||' '||
        (select zt from zt where z = zehner)||' '||
        (select zt from zt where z = einer)
        into text from zt where z = hunderter ;
    end if;
    if length ( in_ZiffernVorkomma ) = 4 then
      set tausender = substring( in_ZiffernVorkomma, 1, 1 );
      set hunderter = substring( in_ZiffernVorkomma, 2, 1 )||'00';
      set zehner    = substring( in_ZiffernVorkomma, 3, 1 )||'0';
      set einer     = substring( in_ZiffernVorkomma, 4, 1 );
      select
        (select zt from zt where z = tausender)||' '||
        zt||' '||
        (select zt from zt where z = zehner)||' '||
        (select zt from zt where z = einer)
        into text from zt where z = 1000 ;
    end if;
    if length ( in_ZiffernVorkomma ) = 5 then
      set hilf_text = NULL;
      select zt into hilf_text from zt where z = substring(in_ZiffernVorkomma,1,2) ;
      if ( hilf_text is NULL ) then
        set zehner = substring( in_ZiffernVorkomma, 1, 1 )||'0';
        set einer  = substring( in_ZiffernVorkomma, 2, 1 );
        select zt||' '||
          (select zt from zt where z = einer) into hilf_text from zt where z = zehner ;
      end if;
      set hunderter = substring( in_ZiffernVorkomma, 3, 1 )||'00';
      set zehner    = substring( in_ZiffernVorkomma, 4, 1 )||'0';
      set einer     = substring( in_ZiffernVorkomma, 5, 1 );
      select zt||' '||
        (select zt from zt where z = zehner)||' '||
        (select zt from zt where z = einer)
        into text from zt where z = hunderter ;
      select hilf_text||' '||zt||' '||text into text from zt where z = 1000;
    end if;
    if length ( in_ZiffernVorkomma ) = 6 then
      set hilf_text = NULL;
      set hunderter = substring( in_ZiffernVorkomma, 1, 1 )||'00';
      set zehner    = substring( in_ZiffernVorkomma, 2, 1 )||'0';
      set einer     = substring( in_ZiffernVorkomma, 3, 1 );
      select zt||' '||
        (select zt from zt where z = zehner)||' '||
        (select zt from zt where z = einer)
        into hilf_text from zt where z = hunderter ;
      set hunderter = substring( in_ZiffernVorkomma, 4, 1 )||'00';
      set zehner    = substring( in_ZiffernVorkomma, 5, 1 )||'0';
      set einer     = substring( in_ZiffernVorkomma, 6, 1 );
      select zt||' '||
        (select zt from zt where z = zehner)||' '||
        (select zt from zt where z = einer)
        into text from zt where z = hunderter ;
      select hilf_text||' '||zt||' '||text into text from zt where z = 1000;
    end if;
    if length ( in_ZiffernVorkomma ) = 7 then
      set hilf_text = NULL;
      set hunderter = substring( in_ZiffernVorkomma, 2, 1 )||'00';
      set zehner    = substring( in_ZiffernVorkomma, 3, 1 )||'0';
      set einer     = substring( in_ZiffernVorkomma, 4, 1 );
      select zt||' '||
        (select zt from zt where z = zehner)||' '||
        (select zt from zt where z = einer)
        into hilf_text from zt where z = hunderter ;
      set hunderter = substring( in_ZiffernVorkomma, 5, 1 )||'00';
      set zehner    = substring( in_ZiffernVorkomma, 6, 1 )||'0';
      set einer     = substring( in_ZiffernVorkomma, 7, 1 );
      select zt||' '||
        (select zt from zt where z = zehner)||' '||
        (select zt from zt where z = einer)
        into text from zt where z = hunderter ;
      select (if substring(in_ziffernvorkomma,1,1)=1 then
              (select zt from zt where z=1000000) else
              (select (select zt from zt where z=substring(in_ziffernvorkomma,1,1))||' '||zt from zt where z>1000000) endif
              )||' '||
             hilf_text||' '||zt||' '||text into text from zt where z = 1000;
    end if;
  end if;
  set zehner = substring( in_ZiffernNachkomma, 1, 1 )||'0';
  set einer  = substring( in_ZiffernNachkomma, 2, 1 );
  set nachkomma = NULL;
  select zt into nachkomma from zt where z = in_ZiffernNachkomma ;
  if nachkomma is NULL then
    select zt||' '|| (select zt from zt where z = einer) into nachkomma from zt where z = zehner ;
  end if;
  set text = text || ' Zlotych ' || isnull(nachkomma,'zero') || ' Grosz';
  RETURN text;
END