Oracle Rakamları Türkçe Yazı İle Yazmak

Aşağıdaki PL/SQL örneğini hem oracle ile dizilere örnek olması için hemde bazı durumlarda lazım olabileceği için yayınlıyorum.

 
Kullanımı:
 
SELECT YaziIleSayi(958454) FROM dual
YAZIILESAYI(958454)
--------------------------------------------------------------------------------
DokuzYüzElliSekizBinDörtYüzElliDört
1 row selected.
 
CREATE OR REPLACE FUNCTION YaziIleSayi (pNumber NUMBER)
   RETURN VARCHAR
AS
   TYPE sayilist_type IS TABLE OF VARCHAR (100)
                            INDEX BY BINARY_INTEGER;
 
   arySayilar      sayilist_type;
   aryBasamaklar   sayilist_type;
   aryOnlar        sayilist_type;
   sNumber         VARCHAR (30);
   sUchane         VARCHAR (3);
   result          VARCHAR (400);
   i               NUMBER;
   basamak         NUMBER;
   yuzu            NUMBER;
   onu             NUMBER;
   biri            NUMBER;
BEGIN
   arySayilar (0) := '';
   arySayilar (1) := 'Bir';
   arySayilar (2) := 'İki';
   arySayilar (3) := 'Üç';
   arySayilar (4) := 'Dört';
   arySayilar (5) := 'Beş';
   arySayilar (6) := 'Altı';
   arySayilar (7) := 'Yedi';
   arySayilar (8) := 'Sekiz';
   arySayilar (9) := 'Dokuz';
   aryBasamaklar (0) := '';
   aryBasamaklar (1) := 'Trilyon';
   aryBasamaklar (2) := 'Milyar';
   aryBasamaklar (3) := 'Milyon';
   aryBasamaklar (4) := 'Bin';
   aryOnlar (0) := '';
   aryOnlar (1) := 'On';
   aryOnlar (2) := 'Yirmi';
   aryOnlar (3) := 'Otuz';
   aryOnlar (4) := 'Kırk';
   aryOnlar (5) := 'Elli';
   aryOnlar (6) := 'Altmış';
   aryOnlar (7) := 'Yetmiş';
   aryOnlar (8) := 'Seksen';
   aryOnlar (9) := 'Doksan';
   sNumber := LPAD (pNumber, 15, '0');
 
   i := -2;
   basamak := 0;
   result := '';
 
   WHILE i <= 12
   LOOP
      i := i + 3;
      suchane := SUBSTR (sNumber, i, 3);
      basamak := basamak + 1;
 
      IF suchane = '000'
      THEN
         CONTINUE;
      END IF;
 
      yuzu := TO_NUMBER (SUBSTR (suchane, 1, 1));
      onu := TO_NUMBER (SUBSTR (sUchane, 2, 1));
      biri := TO_NUMBER (SUBSTR (sUchane, 3, 1));
 
      IF (basamak = 4) AND (sUchane = '001')
      THEN
         yuzu := 0;
         onu := 0;
         biri := 0;
      END IF;
 
      IF yuzu <> 1
      THEN
         result := result || arySayilar (yuzu);
      END IF;
 
      IF yuzu <> 0
      THEN
         result := result || 'Yüz';
      END IF;
 
      result := result || aryOnlar (onu) || arySayilar (biri);
 
      IF (i <= 12) AND (sUchane <> '000')
      THEN
         result := result || aryBasamaklar (basamak);
      END IF;
   END LOOP;
 
   RETURN result;
END;
 
    • No Related Post
bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark
tabs-top

4 Comments »

  1. Teşekkürler ellerinize sağlık. pl/sql örneklerinin devamını bekliyoruz.

    comment-bottom
  2. thegkmnkc Says:

    Güzel çalışma, başlangıç düzeyinde hem fonksiyon için kaynak hemde işe yarar bir fonksiyon olmuş

    comment-bottom
  3. Barbaros Says:

    WHILE i <= 12

    HATA VERIYOR

    comment-bottom
  4. Berkant Says:

    HTML dönüşümü sırasında bazı hatalar olmuş bunları düzenleyip tekrar atacağım.

    comment-bottom

RSS feed for comments on this post. TrackBack URL

Leave a comment