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.

Stored procedure angkabilangan

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.

Code SQL lengkap angkabilangan

-- [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 ;

Download SQL angkabilangan

Apabila anda ingin langsung mendownload file .SQL nya bisa melalui link ini

Terima Kasih.

Have fun with coding :-D

if you think this article is useful (Y) , please leave a comment.. ;-)

14 Comments

Join the discussion and tell us your opinion.

Bennyreply
17 Apr 2010 at 12:00 am

eh chan.. ki do podo comment`e neng fb u kabeh yo??
rak ono sing comment da sini?? haha

Christian Chandra
17 Apr 2010 at 12:10 am
– In reply to: Benny

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 =)

ucokreply
17 Apr 2010 at 1:47 am

terima kasih brader…

Christian Chandra
17 Apr 2010 at 7:25 am
– In reply to: ucok

sama-sama brader 😉

wiralodrareply
9 Jan 2011 at 3:01 pm

mas.ane masih cupu nih ma sql, mnt pendapatnya.ni syntak error mulu,uda ngubek manualnya msh gk ngeh juga:D
mysql> create procedure ShStatus(IN nomorNIP int(3))
-> begin
-> declare keterangan varchar(2);
-> declare tampil varhar(12);
-> select status as tampil from pegawai where nip=nomorNIP;
-> if ( status=’aktif’ ) then
-> set keterangan=’Y’;
-> else
-> set keterangan=’T’;
-> end if
-> end//
erronya bilangnya di line4,tp dicoba langsung command selectnya,normal
matur nuwun 🙂

Ridwan Tahirreply
11 Apr 2011 at 1:19 pm

Ini gimana cara penggunaan untuk menampilkan store procedure nya ya? saya sudah ubeg-ubeg ga dapat ….. Please need you help

Christian Chandra
11 Apr 2011 at 2:17 pm
– In reply to: Ridwan Tahir

Untuk penggunaannya:
1. code diatas silahkan disimpan di dalam .sql lalu di running melalui mySQL.
2. panggil procedure angkabilangan dengan inputan parameter berupa angka
3. simpan dalam variable hasilnya dan di tampilkan melalui select 😀

doclines
23 Jun 2011 at 10:00 am
– In reply to: Christian Chandra

kalo untuk pemanggilan sudah bisa mas. trims. tapi kalo manggilnya di dalam SELECT gimana? maksutnya, kalo mo nerbilangin salah satu field gitu, ya apa caranya? maklum pemula. mohon pencerahannya.

afif mudrikreply
28 Okt 2011 at 10:53 am

waah.. briliant sekali.. tutorialnya jelas, makasih 😀

Agunreply
7 Nov 2011 at 2:40 pm

Mantappp gan…. (Y) :o)

Boleh minta tutorial lengkap untuk membuat stored procedure di mysql ga???

agnireply
5 Des 2011 at 4:38 pm

gan, ane udah nyoba ni pake procedurenya tapi ada masalah ya ketika ada angka 10000000, hrsnya “sepuluh juta “kok jadi ” satu puluh juta “..mohon pencerahannya gan????

Akuuureply
14 Des 2011 at 11:43 pm

Hmmm… Mantab… tambah lg referensi terbilang, selain pake javascript…. tengkyu gan… (Y)

adireply
19 Feb 2012 at 4:40 pm

thanks bro 😎

@Khaaliifaahreply
27 Jan 2013 at 3:24 pm

Kalau kode script pada Java Netbeans ada yang tau nggak???
Tapi yang pake Web Apllication bukan Java Application
Kirim email [email protected]

Leave a reply