Image by jbmacros67 on Pixabay |
Saat membuat stored program (procedure, function, triggers dan event) biasanya kita perlu mendahuluinya dengan pernyataan delimiter $$ atau delimiter // dan jika tidak menggunakan delimiter maka biasanya akan menyebabkan error ketika statement di akhiri dengan tanda titik koma/semicolon (;), lalu mengapa hal itu bisa terjadi dan mengapa kita perlu menggunakan delimiter terlebih dahulu sebelum membuat stored routines? Secara default bentuk / format dasar delimiter adalah sebagai berikut:
delimiter delimiter_karakter < Untuk mengawali delimiter
.....
delimiter ; < Untuk mengakhiri delimiter
Pada umumnya setiap satu baris statement sql harus di akhiri dengan tanda titik koma/semicolon (;) yang menandakan akhir dari query dan tanda semicolon itulah yang secara default disebut sebagai delimiter (pembatas), namun ketika membuat stored program (procedure, function, trigger dan event) dapat berisikan beberapa statement sql yang di akhiri dengan semicolon sehingga ketika kita menuliskan statement sql saat membuat stored program tanpa diawali delimiter kemudian di akhiri dengan semicolon maka akan dianggap sebagai akhir query dan akan segera di eksekusi ketika menekan tombol enter sehingga akan menyebabkan error, contohnya sebagai berikut:
mysql> create procedure coba(id int)
-> begin
-> select nama, npm from mahasiswa where id_mhs = id;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
Ini terjadi karena server menganggap statement sudah selesai yang diakhiri dengan semicolon sedangkan statement create procedure masih belum selesai, maka contoh penggunaan yang benar adalah sebagai berikut:
mysql> delimiter $$
mysql> create procedure coba(id int)
-> begin
-> select nama, npm from mahasiswa where id_mhs = id;
-> end $$
Query OK, 0 rows affected (0.09 sec)
mysql> delimiter ;
mysql> call coba(1);
+----------+-------------+
| npm | nama |
+----------+-------------+
| 51411136 | AA Aditya A |
+----------+-------------+
1 row in set (0.09 sec)
Query OK, 0 rows affected (0.13 sec)
Sebenarnya kita bisa membuat stored routine tanpa delimiter jika hanya memiliki satu baris query, contohnya sebagai berikut:
mysql> create procedure coba(id int)
-> select npm, nama from mahasiswa where id_mhs = id;
Query OK, 0 rows affected (0.11 sec)
mysql> call coba(1);
+----------+-------------+
| npm | nama |
+----------+-------------+
| 51411136 | AA Aditya A |
+----------+-------------+
1 row in set (0.09 sec)
Query OK, 0 rows affected (0.13 sec)
Apakah keyword delimiter hanya bisa digunakan saat membuat stored program saja dan apakah harus selalu menggunakan simbol $$ untuk mengawali pernyataan delimiter? Jawabannya adalah Tidak, kita juga bisa menggunakan delimiter tanpa membuat stored program namun setiap statement yang diakhiri semicolon akan di tahan terlebih dahulu sampai diakhiri dengan delimiter_karakter, kita juga bisa menggunakan simbol/karakter/huruf atau gabungan dari ketiganya sehingga menjadi kalimat namun lebih baik adalah dengan tidak membuatnya menjadi rumit karena fungsinya hanya untuk membuat sekumpulan statement saja, contohnya sebagai berikut:
mysql> delimiter G3eK@sMeD!a
mysql> select npm, nama from mahasiswa where id_mhs = 1;
-> select npm, nama from mahasiswa where id_mhs = 2;
-> G3eK@sMeD!a
+----------+-------------+
| npm | nama |
+----------+-------------+
| 51411136 | AA Aditya A |
+----------+-------------+
1 row in set (0.00 sec)
+----------+------------+
| npm | nama |
+----------+------------+
| 51412371 | A Aditya A |
+----------+------------+
1 row in set (0.02 sec)
mysql> delimiter ;
Maka dari sini kita dapat melihat bahwa fungsi delimiter adalah untuk mengemas kumpulan statement sampai diakhiri dengan delimiter_karakter dan untuk menutup delimiter itu sendiri juga harus di akhiri dengan semicolon, jika tidak maka kita akan tetap berada didalam delimiter.