Membuat Stored Procedure untuk mengubah angka menjadi bilangan terbilang di MySQL
Dalam rangka menyusun tugas mata kuliah Database Administrator sebagai tugas ujian akhir semester di universitas saya,
yang pada kali ini saya ditugaskan untuk membuat store procedure di MySQL dengan inputan parameter angka dan mengeluarkan hasil berupa bilangan.
Jadi misalkan input
CALL angkabilangan(123456,@hasil); SELECT @hasil;
Maka akan menghasilkan
seratus dua puluh tiga ribu empat ratus lima puluh enam
Langsung saja akan saya sajikan listing progam untuk membuat store procedure angka menjadi bilangan.
-- [FILENAME] db07020065.sql -- [AUTHOR] Christian Chandra -- [WEBSITE] http://blog.christianchandra.com -- [HAL] Tugas Database Administrator -- [JUDUL] Store Procedure Angka Menjadi Bilangan DROP DATABASE IF EXISTS db07020065; CREATE DATABASE db07020065; USE db07020065; SET @hasil = ''; -- setting max recursive untuk store procedure (default: 0) SET @@global.max_sp_recursion_depth=255; SET @@session.max_sp_recursion_depth=255; DELIMITER $$ DROP PROCEDURE IF EXISTS angkabilangan$$ CREATE PROCEDURE angkabilangan(IN i_angka BIGINT, OUT o_hasil TEXT) BEGIN DECLARE i BIGINT DEFAULT 0; DECLARE cetak TEXT default ''; DECLARE tmp TEXT default ''; DECLARE counts BIGINT DEFAULT 0; DECLARE lengthangka INT DEFAULT 0; -- hitung banyak digit i_angka SET lengthangka := LENGTH(i_angka); -- siapkan data yang dibutuhkan DROP TABLE IF EXISTS tbdasar; DROP TABLE IF EXISTS tbangka; DROP TABLE IF EXISTS tbsatuan; CREATE TEMPORARY TABLE tbdasar(indek INT,dasar VARCHAR(50)); INSERT INTO tbdasar VALUES (1,'satu'), (2,'dua'), (3,'tiga'), (4,'empat'), (5,'lima'), (6,'enam'), (7,'tujuh'), (8,'delapan'), (9,'sembilan'); CREATE TEMPORARY TABLE tbangka(indek INT,angka INT); INSERT INTO tbangka VALUES (0,1000000000), (1,1000000), (2,1000), (3,100), (4,10), (5,1); CREATE TEMPORARY TABLE tbsatuan(indek INT,satuan VARCHAR(100)); INSERT INTO tbsatuan VALUES (0,'milyar'), (1,'juta'), (2,'ribu'), (3,'ratus'), (4,'puluh'), (5,''); IF i_angka = 0 THEN SET cetak := 'nol'; ELSEIF i_angka < 1000000000000 THEN WHILE i_angka <> 0 DO SET counts = FLOOR(i_angka / (SELECT angka FROM tbangka WHERE indek=i)); IF counts > 9 THEN CALL angkabilangan(counts,tmp); SET cetak := CONCAT(cetak,'',tmp); SET cetak := CONCAT(cetak,'',(SELECT satuan FROM tbsatuan WHERE indek=i)); ELSE IF counts > 0 AND counts < 10 THEN SET cetak := CONCAT(cetak, ' ', (SELECT dasar FROM tbdasar WHERE indek=counts), ' ', (SELECT satuan FROM tbsatuan WHERE indek=i)); END IF; END IF; -- DEBUG counts ! xxx xxx xx x x x /* SET cetak = CONCAT(cetak, ' ', counts, '[', i_angka, '/', (SELECT angka FROM tbangka WHERE indek=i), ']' );*/ SET i_angka = i_angka - ((SELECT angka FROM tbangka WHERE indek=i) * counts); SET i = i + 1; END WHILE; -- ubah satu ratus dsb menjadi seratus SET cetak = REPLACE(cetak,"satu belas","sebelas"); SET cetak = REPLACE(cetak,"satu puluh","sepuluh"); SET cetak = REPLACE(cetak,"satu ratus","seratus"); IF lengthangka = 4 THEN SET cetak = REPLACE(cetak,"satu ribu","seribu"); END IF; -- ubah belasan SET cetak = REPLACE(cetak,"sepuluh satu","sebelas"); SET cetak = REPLACE(cetak,"sepuluh dua","dua belas"); SET cetak = REPLACE(cetak,"sepuluh tiga","tiga belas"); SET cetak = REPLACE(cetak,"sepuluh empat","empat belas"); SET cetak = REPLACE(cetak,"sepuluh lima","lima belas"); SET cetak = REPLACE(cetak,"sepuluh enam","enam belas"); SET cetak = REPLACE(cetak,"sepuluh tujuh","tujuh belas"); SET cetak = REPLACE(cetak,"sepuluh delapan","delapan belas"); SET cetak = REPLACE(cetak,"sepuluh sembilan","sembilan belas"); -- SET cetak = 'angka bisa dihitung'; ELSE SET cetak := 'Inputan terlalu besar'; END IF; -- return value ke o_hasil SET o_hasil = cetak; END; $$ DELIMITER ;
Apabila anda ingin langsung mendownload file .SQL nya bisa melalui link ini
Terima Kasih.
Have fun with coding 
if you think this article is useful
, please leave a comment.. 
© 2010, Christian Chandra. All rights reserved. Find out more at http://blog.christianchandra.com




about 4 months ago
eh chan.. ki do podo comment`e neng fb u kabeh yo??
rak ono sing comment da sini?? haha
about 4 months ago
hehe.. ndapapa ben.. teman kita yang ngeblog kan sedikit, jadi juga nda bisa kasi backlink ma trackback..
ayo makane ndang cepet blog mu di benahi =)
about 4 months ago
terima kasih brader…
about 4 months ago
sama-sama brader