Mysql : create function

By human

Awalnya bingung cara mengakali perintah select di dalam select.
Pas di ingat-ingat dulu pernah belajar function tapi di MSSQL bukan MYSQL.

setelah ubek-ubek google, test sana sini, coba ini dan itu dapat juga clue.

untuk contoh kasus dapat dilihat dibawah ini
ada 2 tabel, 1 tabel berisi daftar noc, tabel ke berisi noc yang melaksanakan, masalahnya di tabel 2 ada pengulangan kolom noc. Ini yang menjadi tantangan.

Tabel 1

mysql> desc tbl_noc;
+--------+----------+------+-----+---------+----------------+
| Field  | Type     | Null | Key | Default | Extra          |
+--------+----------+------+-----+---------+----------------+
| id     | int(8)   | NO   | PRI | NULL    | auto_increment |
| nama   | char(30) | NO   |     | NULL    |                |
| passwd | char(20) | YES  |     | NULL    |                |
| telp   | char(16) | YES  |     | NULL    |                |
+--------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

Tabel 2

mysql> desc tbl_bukis;
+--------------+---------+------+-----+---------+----------------+
| Field        | Type    | Null | Key | Default | Extra          |
+--------------+---------+------+-----+---------+----------------+
| no           | int(10) | NO   | PRI | NULL    | auto_increment |
| id_pelanggan | int(10) | YES  |     | 0       |                |
| t_isolir     | date    | YES  |     | NULL    |                |
| id_noc1      | int(10) | YES  |     | 0       |                |
| t_bukis      | date    | YES  |     | NULL    |                |
| id_noc2      | int(10) | YES  |     | 0       |                |
| note         | text    | YES  |     | NULL    |                |
| orderby      | text    | YES  |     | NULL    |                |
+--------------+---------+------+-----+---------+----------------+
8 rows in set (0.00 sec)

Query yang ingin di pakai adalah mengubah kolom id_noc1 dan id_noc2 menjadi nama;

 select id_noc1, id_noc2 from tbl_bukis;
+---------+---------+
| id_noc1 | id_noc2 |
+---------+---------+
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
|     105 |     100 |
+---------+---------+

Tentunya susah kalau yang terbaca hanya id-nya, oleh karenanya harus dibuat function pembantu yang bertugas untuk merubah secara realtime, id_noc menjadi nama.

mysql> create function ubahnoc (idx int) returns char(30)
    -> begin
    -> declare hasil char(30);
    -> set hasil = ( select nama from tbl_noc where id = idx );
    -> return hasil;
    -> end$$
Query OK, 0 rows affected (0.27 sec)

Hasilnya

mysql> select ubahnoc(id_noc1),ubahnoc(id_noc2) from tbl_bukis;
+------------------+------------------+
| ubahnoc(id_noc1) | ubahnoc(id_noc2) |
+------------------+------------------+
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
| adi              | admin            |
+------------------+------------------+

Silakan mencoba, semoga bermanfaat.

No Comments

(Required)
(Required, will not be published)