Showing posts with label SQL. Show all posts
Showing posts with label SQL. Show all posts
Selamat siang semua, kali ini saya ingin membagi "Perintah SQL Untuk Menambah Bulan", artikel ini sementara hanya saya batasi untuk Oracle dan MySQL. Sebagai pendahuluan, apakah Anda pernah menginginkan untuk menambah interval bulan pada perintah SQL, sehingga Query Anda akan menampilkan 1 atau 3 bulan kedepan itu bulan apa dari Query SQL Anda.

Namun sebagai catatan, pastikan terlebhi dahulu, bahwasanya jam di server Database Anda sudah benar. Walaupun ini jarang terjadi, biasanya baterai CMOS bermasalah, silakan Anda dapat mencari cara penanggulangannya lewat menu "Pencarian" di samping kiri atas

Baiklah, saya mulai terlebih dahulu dengan oracle
Pada Oracle, Untuk menambah bulan, Anda dapat menggunakan perintah
ADD_MONTHS(TANGGAL, n)


dimana TANGGAL (dalam format DATE), dan n (dalam format NUMBER / NUMERIC). Jika Anda menemui error, cobalah untuk menerapkan format-format tersebut. Atau Anda bisa berkomentar di artikel ini

SELECT ADD_MONTHS(SYSDATE, 1) AS BULANDEPAN FROM DUAL;
| BULANDEPAN          |
| 15/06/2012 13:23:20 |


Nah, Anda juga bisa menambah atau mengurangi bulan, seperti :

SELECT ADD_MONTHS(SYSDATE, 2) AS DUABULAN FROM DUAL;
| DUABULAN            |
| 15/07/2012 13:23:20 |


SELECT ADD_MONTHS(SYSDATE, -2) AS MINDUABULAN FROM DUAL;
| MINDUABULAN         |
| 15/03/2012 13:23:20 |
Read More
Aduh mak!!. Saya punya aplikasi dimana aplikasi tersebut harus mengurutkan ketika kita memilih ordering data, gimana ya menjelaskannya. Yaitu mengurutkan data dari urutan record data yang sudah ada, sehingga terbentuklah urutan yang baru, sesuai yang diinginkan. Ada yang paham kata-kata ini gak ya? #palu, okelah para permirsa. Contohnya, saya punya table buah, bagi Anda yang belum terlalu paham cara membuat table, bisa disimak tutorial dari w3shools.com ini. Dan kurang lebih untuk table buah saya yang dibuat di Oracle, dapat disimak strukturnya

TABLE BUAH
ID                      VARCHAR(2)
NAMA                    VARCHAR2(20)
PARENT                  VARCHAR(2)
URUTAN                  NUMBER
PRIMARY KEY (ID) 
INDEX CONSTRAINT (PARENT, URUTAN)

dan setelah saya insert beberapa data, kurang lebihnya menjadi seperti ini

IDNAMAPARENTURUTAN
1Pohon Berbuah01
2Mangga11
3Pisang12
4Jambu13
5Sirsat14
6Pohon Merambat02
7Markisa21
8Anggur22

Nah, untuk data parent dan urutan sudah saya constraint sebagai primary key, sehingga mau tidak mau jika saya mengupdate mangga menjadi urutan ke 3, dengan parent 1 yaitu pohon berbuah, maka yang perlu dilakukan adalah pisang dan jambu bergeser ke bawah dan mangga menempati urutan ke 3. Dan datanya menjadi

IDNAMAPARENTURUTAN
1Pohon Berbuah01
3Pisang11
4Jambu12
2Mangga13
5Sirsat14
6Pohon Merambat02
7Markisa21
8Anggur22

Setelah browsing kesana-kemari yang belum membuahkan hasil, akhirnya saya membuat procedure/function oracle sendiri. kurang lebih scriptnya seperti ini

CREATE FUNCTION URUT_BUAH(P_PARENT VARCHAR, P_IDBUAH VARCHAR, P_NAMABUAH VARHCAR2, P_URUTAN NUMBER) RETURN VARCHAR2
IS 
 V_JUMLAH NUMBER; 
 V_URUT NUMBER; 
 V_MAXURUT NUMBER; 
BEGIN
 
 -- untuk mengambil jumlah record, dan urutan semula
 SELECT COUNT(1), URUTAN INTO V_JUMLAH V_URUT FROM BUAH WHERE ID = P_IDBUAH;
 -- untuk mengambil urutan terakhir ditambah satu, jika ingin insert yang baru.
 SELECT NVL(MAX(URUTAN), 0)+1 INTO V_MAXURUT FROM BUAH WHERE PARENT = P_PARENT;

-- jika idbuah ada, dan ingin diurutkan sesuai urutan maka
IF V_JUMLAH = 1 THEN
 -- jika urutan lebih besar dari urutan semula 
 IF P_URUTAN > V_URUT THEN
    UPDATE BUAH SET URUTAN = 0 WHERE ID = P_IDBUAH;
    FOR I IN V_URUT .. P_URUTAN-1 LOOP
     UPDATE BUAH SET URUTAN = I WHERE URUTAN = (I+1) AND PARENT = P_PARENT;
    END LOOP;
    UPDATE BUAH SET URUTAN = P_URUTAN WHERE ID = P_IDBUAH;
 
 -- jika urutan lebih kecil dari urutan semula
 ELSIF P_URUTAN < V_URUT THEN
    UPDATE BUAH SET URUTAN = 0 WHERE ID = P_IDBUAH;
    FOR I IN REVERSE P_URUTAN+1 .. V_URUT LOOP
      UPDATE BUAH SET URUTAN = I WHERE URUTAN = (I-1) AND PARENT = P_PARENT;
    END LOOP;
    UPDATE BUAH SET URUTAN = P_URUTAN WHERE ID = P_IDBUAH;
 END IF;
 RETURN 'DATA TELAH DIURUTKAN';

-- jika idbuah belum pernah ada, maka tambahkan record
ELSIF V_JUMLAH = 0 THEN
 INSERT INTO BUAH (ID, NAMA, PARENT, URUTAN) VALUES (P_IDBUAH, P_NAMABUAH, P_PARENT, V_MAXURUT); 
 RETURN 'DATA TELAH TERINSERT'; 

ELSE
 RETURN 'ADA KESALAHAN BRO!'; 
END IF;
END URUT_BUAH;


Kalau kurang jelas dapat ditanyakan ya!.
nah, bagaimana jika saya ingin mengubah parent juga Pak? kita simak dan tunggu tutorial selanjutnya
Read More
Previous PostOlder Posts Home