Sabtu, 30 Juni 2012

MEMBUAT PROGRAM PENJADWALAN CPU MENGGUNAKAN C++

NI dia Silahkan Di compile Dulu ya sebelum Di kumpulkan Takut Salah soalnya.. karena saya sendiri belumm mencoba,,, heheheh
PROGRAM PENJADWALAN CPU FCFS DENGAN C++

// Header file for Cpu scheduling


#include<iostream.h>
#include<conio.h>
#include<stdio.h>

class cpuschedule
{
    int n,Bu[20];
    float Twt,Awt,A[10],Wt[10],w;
public:
    //Getting the No of processes & burst time
    void Getdata();
    //First come First served Algorithm
    void Fcfs();
    //Shortest job First Algorithm
    void Sjf();
    //Shortest job First Algorithm with Preemption
    void SjfP();
    //Shortest job First Algorithm with NonPreemption
    void SjfNp();
    //Round Robin Algorithm
    void RoundRobin();
    //Priority Algorithm
    void Priority();
};
// Implementation file for Cpu scheduling

#include "cpuh.h"
//Getting no of processes and Burst time
void cpuschedule::Getdata()
{
    int i;
    cout<<"
Enter the no of processes:";
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cout<<"
Enter The BurstTime for Process p"<<i<<"=    ";
        cin>>Bu[i];
    }
}

//First come First served Algorithm
void cpuschedule::Fcfs()
{
    int i,B[10];
    Twt=0.0;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
    }
    Wt[1]=0;
    for(i=2;i<=n;i++)
    {
        Wt[i]=B[i-1]+Wt[i-1];
    }

    //Calculating Average Weighting Time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"
Total   Weighting Time="<<Twt;
    cout<<"
Average Weighting Time="<<Awt<<"
";
}

//Shortest job First Algorithm
void cpuschedule::Sjf()
{
    int i,j,temp,B[10];
    Twt=0.0;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
    }
    for(i=n;i>=1;i--)
    {
        for(j=1;j<=n;j++)
        {
            if(B[j-1]>B[j])
            {
                temp=B[j-1];
                B[j-1]=B[j];
                B[j]=temp;
            }
        }
    }

    Wt[1]=0;
    for(i=2;i<=n;i++)
    {
        Wt[i]=B[i-1]+Wt[i-1];
    }
    //calculating Average Weighting Time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"
Total   Weighting Time="<<Twt;
    cout<<"
Average Weighting Time="<<Awt<<"
";
}

//Shortest job First Algorithm with NonPreemption

void cpuschedule::SjfNp()
{
    int i,B[10],Tt=0,temp,j;
    char S[10];
    float A[10],temp1,t;
    Twt=0.0;
    w=0.0;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
        S[i]='T';
        Tt=Tt+B[i];
        cout<<"
Enter the Arrival Time for"<<i<<"th process=    ";
        cin>>A[i];
    }

    for(i=n;i>=1;i--)
    {
        for(j=3;j<=n;j++)
        {
            if(B[j-1]>B[j])
            {
                temp=B[j-1];
                temp1=A[j-1];
                B[j-1]=B[j];
                A[j-1]=A[j];
                B[j]=temp;
                A[j]=temp1;
            }
        }
    }

    for(i=1;i<=n;i++)
    {
        cout<<"
p"<<i<<"    "<<B[i]<<"    "<<A[i];
    }

    //For the 1st process
        Wt[1]=0;
        w=w+B[1];
        t=w;
        S[1]='F';

        while(w<Tt)
        {
            i=2;
            while(i<=n)
            {
                if(S[i]=='T'&&A[i]<=t)
                {
                    Wt[i]=w;
                    cout<<"
WT"<<i<<"="<<Wt[i];
                    S[i]='F';
                    w=w+B[i];
                    t=w;
                    i=2;
                }
                else
                    i++;
            }
        }

        for(i=1;i<=n;i++)
            cout<<"
Wt"<<i<<"=="<<Wt[i];


        //calculating average weighting Time
        for(i=1;i<=n;i++)
            Twt=Twt+(Wt[i]-A[i]);
        Awt=Twt/n;
    cout<<"Total   Weighting Time="<<Twt<<"
";
    cout<<"Average Weighting Time="<<Awt<<"
";
}

//Priority Algorithm

void cpuschedule::Priority()
{
    int i,B[10],P[10],j;
    w=0.0;
    int max;
    Twt=0.0;
    max=1;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
        cout<<"
Enter the priority for process P"<<i<<"=    ";
        cin>>P[i];
        if(max<P[i])
            max=P[i];
    }
    j=1;
    while(j<=max)
    {
        i=1;
        while(i<=n)
        {
            if(P[i]==j)
            {
                Wt[i]=w;
                w=w+B[i];
            }
            i++;
        }
        j++;
    }

    //calculating average weighting Time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"Total   Weighting Time="<<Twt<<"
";
    cout<<"Average Weighting Time="<<Awt<<"
";
}

//Shortest job First Algorithm with Preemption
void cpuschedule::SjfP()
{
    int i,j,m,Wt[10],k,B[10],A[10],Tt=0,Wtm[10],temp;
    char S[20],start[20];
    int max=0,Time=0,min;
    float Twt=0.0,Awt;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process P"<<i<<"=    "<<B[i];
        if(B[i]>max)
            max=B[i];
        Wt[i]=0;
        S[i]='T';
        start[i]='F';
        Tt=Tt+B[i];
        cout<<"
Enter the Arrival Time for"<<i<<"th process=    ";
        cin>>A[i];
        if(A[i]>Time)
            Time=A[i];
    }
    //cout<<"
Max="<<max;
    int w=0,flag=0,t=0;
    i=1;
    while(t<Time)
    {
        if(A[i]<=t && B[i]!=0)
        {
            if(flag==0)
            {
                Wt[i]=Wt[i]+w;
                cout<<"
Wt["<<i<<"]="<<Wt[i];
            }
            B[i]=B[i]-1;
            if(B[i]==0)
                S[i]='F';
            start[i]='T';
            t++;
            w=w+1;
            if(S[i]!='F')
            {
                j=1;flag=1;
                while(j<=n && flag!=0)
                {
                    if(S[j]!='F' && B[i]>B[j] && A[j]<=t && i!=j )
                    {
                        flag=0;
                        Wt[i]=Wt[i]-w;
                        i=j;
                    }
                    else
                    {
                        flag=1;
                    }
                    j++;
                }
            }
            else
            {
                i++;
                j=1;
                while(A[j]<=t &&j<=n)
                {
                    if(B[i]>B[j] && S[j]!='F')
                    {
                        flag=0;
                        i=j;
                    }
                    j++;
                }
            }
        }
        else
            if(flag==0)
            i++;
    }


    cout<<"
Printing remaining burst time
";
    for(i=1;i<=n;i++)
        cout<<"
B["<<i<<"]="<<B[i];
    cout<<"
";

    while(w<Tt)
    {
        min=max+1;
        i=1;
        while(i<=n)
        {
            if(min>B[i] && S[i]=='T')
            {
                min=B[i];
                j=i;
            }
            i++;
        }
        i=j;
        if(w==Time && start[i]=='T')
        {
            w=w+B[i];
            S[i]='F';
        }
        else
        {
            Wt[i]=Wt[i]+w;
            w=w+B[i];
            S[i]='F';
        }
    }

cout<<"Weight info
";

    for(i=1;i<=n;i++)
        cout<<"
WT["<<i<<"]="<<Wt[i];
cout<<"after subtracting arrival time
";
    for(i=1;i<=n;i++)
    {
        Wt[i]=Wt[i]-A[i];
        cout<<"
WT["<<i<<"]="<<Wt[i];
    }
    //Calculating Average Weighting time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"
Average Weighting Time="<<Awt;



}

//Round Robin Algorithm
void cpuschedule::RoundRobin()
{

    int i,j,tq,k,B[10],Rrobin[10][10],count[10];
    int max=0;
    int m;
    Twt=0.0;
    for(i=1;i<=n;i++)
    {
        B[i]=Bu[i];
        cout<<"
Burst time for process p"<<i<<"=    ";
        cout<<B[i];
        if(max<B[i])
            max=B[i];
        Wt[i]=0;
    }
    cout<<"
Enter the Time Quantum=";
    cin>>tq;
    //TO find the dimension of the Rrobin array
    m=max/tq+1;

    //initializing Rrobin array
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            Rrobin[i][j]=0;
        }
    }
    //placing value in the Rrobin array
    i=1;
    while(i<=n)
    {
        j=1;
        while(B[i]>0)
        {
            if(B[i]>=tq)
            {
                B[i]=B[i]-tq;
                Rrobin[i][j]=tq;
                j++;
            }
            else
            {
                Rrobin[i][j]=B[i];
                B[i]=0;
                j++;
            }
        }
        count[i]=j-1;
        i++;
    }

    cout<<"Display
";
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cout<<"Rr["<<i<<","<<j<<"]="<<Rrobin[i][j];
            cout<<"    ";
        }
        cout<<"
";
    }
    //calculating weighting time
    int x=1;
    i=1;
    while(x<=n)
    {
        for(int a=1;a<x;a++)
        {
            Wt[x]=Wt[x]+Rrobin[a][i];
        }
        i=1;
        int z=x;
        j=count[z];
        k=1;
        while(k<=j-1)
        {
            if(i==n+1)
            {
                i=1;
                k++;
            }
            else
            {
                if(i!=z)
                {
                    Wt[z]=Wt[z]+Rrobin[i][k];
                }
                i++;
            }
        }
        x++;
    }
    for(i=1;i<=n;i++)
        cout<<"
Weighting Time for process P"<<i<<"="<<Wt[i];

    //calculating Average Weighting Time
    for(i=1;i<=n;i++)
        Twt=Twt+Wt[i];
    Awt=Twt/n;
    cout<<"
Total   Weighting Time="<<Twt;
    cout<<"
Average Weighting Time="<<Awt<<"
";
}

//Application file for cpu Scheduling
#include "cpuh.h"

void main()
{
    int ch,cho;
    cpuschedule c;
    do
    {
        cout<<"                 MENU
";
        cout<<"1.Getting BurstTime
";
        cout<<"2.FirstComeFirstServed
";
        cout<<"3.ShortestJobFirst
";
        cout<<"4.RoundRobin
";
        cout<<"5.Priority
";
        cout<<"6.EXIT
";
        cout<<"Enter your choice
";
        cin>>ch;
        switch(ch)
        {
        case 1:
            c.Getdata();
            break;
        case 2:
            cout<<"FIRST COME FIRST SERVED SCHEDULING
";
            c.Fcfs();
            break;
        case 3:
            cout<<"SHORTEST JOB FIRST SCHEDULING
";
            do
            {
                cout<<"1.SJF-Normel
";
                cout<<"2.SJF-Preemptive
";
                cout<<"3.SJF-NonPreemptive
";
                cout<<"Enter your choice
";
                cin>>cho;
                switch(cho)
                {
                case 1:
                    c.Sjf();
                    break;
                case 2:
                    c.SjfP();
                    break;
                case 3:
                    c.SjfNp();
                    break;
                }
            }while(cho<=3);
            break;
        case 4:
            cout<<"ROUND ROBIN SCHEDULING
";
            c.RoundRobin();
            break;
        case 5:
            cout<<"PRIORITY SCHEDULING
";
            c.Priority();
            break;
        case 6:
            break;
        }
    }while(ch<=5);
}


      

Kamis, 28 Juni 2012

CONTOH STUDI KASUS PROYEK IT

STUDI KASUS PROYEK IT
(Coretan Mahasiswa UNIM) Di bawah ini diberikan Sebuah Studi Kasus Proyek IT tentang pengembangan dan  pembangunan sebuah jaringan komputer. Dari kasus tersebut akan dibuat sebuah project charter sebagai langkah awal pelaksanaan proyek.

KASUS: Upgrade Jaringan Komputer
Jaringan komputer sebuah perusahaan terdiri dari 380 PC memakai OS win/95; 11 server win/NT; dan 5 server Novell NetWare;
Manajemen perusahaan memutuskan untuk meng-upgrade OS semua PC menjadi Win XP, dan semua server, termasuk server NetWare, menggunakan Win 2000 Server.
Nama proyek: upgrade sistem operasi menuju Win XP dan Win server 2000 dalam lingkungan UKM.
Sponsor proyek           :           Rektor UKM, CISCO Networking.
Manajer proyek           :           kepala NOC (Network Operation Center)
Tim kerja proyek         :           Network Operation Center.
Tujuan proyek             :           Semua OS PC akan di-upgrade ke Win XP pada akhir   tahun (20 Des 2003) ini. Semua server akan di-upgrade ke Win 2000 server pada akhir tahun depan (20 Des 2004).

Kasus bisnis
win 95 telah digunakan selama 5 tahun terakhir ini dalam mengelola bisnis perusahaan.
Namun saat ini telah ada produk baru yang memiliki kemampuan jauh lebih baik: Win XP.
Pekerjaan akan lebih produktif, terkendali, aman, dan lebih user-friendly.
Berorientasi teknologi baru spt: jaringan infrared, dan teknologi web-based dalam menunjang informasi di perusahaan.
Menggantikan server yang ada dengan multi-processors server yang ditunjang oleh teknologi win 2000 adv. server.
Win 2000 Adv. Server membantu user dalam menemukan sumberdaya dalam jaringan komputer perusahaan, meningkatkan kinerja jaringan, dan pengamanan yang memadai.

Hasil proyek yang akan dicapai:
Instalasi Win XP pada setiap PC
Instalasi Win 2000 pada setiap server yang ada.
Seluruh instalasi akan selesai pada 20 Des 2004.

Penjadwalan kasar:
Jun:
start test metode pengembangan, menginventarisari applikasi setiap pemakai PC, menulis scripts untuk proses pemindahan applikasi nantinya.
Agust:
memulai penggantian (100 user). Mencoba, mendokumentasikan problem dan pemecahannya. Mulai desain Win 2000 Server.
Okt:
Mulai pelatihan Win XP bagi calon user.
Sementara itu Win XP mulai diinstalasi pada PC mereka.
Mengecek masalah-masalah yang mungkin ada, dan helpdesk (support) bagi user.
Pengetesan tiga server dengan Win 2000.
Des:
Penyelesaian instalasi Win XP.
 Mulai menginstalasi Win 2000 Server dan membangun infrastrukturnya (utk server-server yang baru) dan inventarisasi problem serta penyelesaian.
Instalasi untuk server lainnya dimulai.
Pembangunan infrastruktur diperkirakan memakan waktu satu tahun. 20 Des 2004 keseluruhan proyek selesai.


Sumberdaya proyek:
Perkiraan biaya: Rp. 800 juta. (termasuk biaya software baru, XP, win 2000, lisensi, konsultan, pelatihan).
Laboratorium pengetesan akan dibooking penuh selama 5 bulan.
Konsultansi dari CISCO Networking Consultancy.

Anggaran Kasar
Variabel
Harga
Total
Win xp (PC Client)
364 * $ 100
$ 36400
Win server 2000(PC Server)
16 * $ 120
$ 1920
Perbaikan ruang server
16 * $ 500
$ 8000
Pembelian Lisensi Soffware-software Lain
380 * $ 50
$ 19000
Biaya Lain-lain
$ 1000
$ 1000

Permasalahan
Hasil dari studi kasus yang saya baca dari studi kasus proyek Upgrade Jaringan Komputer Adalah
1.      Pihak pengelola tidak memiliki rencana dan mekanisme yang jelas untuk menghadapi ganguan, seperti pemilihan Mahalnya Harga Software yang kompatible dengan windows Xp.
2.      Apabila melakukan upgrade sebuah sistem oprasi Maka diperlukan juga upgrade hardware untuk dapat mengoptimalkan kerja dari sistem operasi tersebut dan disini pihak pengelola juga tidak memberikan perencanaan yang jelas untuk masalah itu. Dan jika ugpgrade hardware tidak di lakukan maka dapat di pastikan Waktu untuk penggantian win 95 menjadi win Xp di 364 PC, Akan Menjadi sangat lama dan pasti akan sangat berpengaruh pada kinerja komputer sendiri.  Jika proses loading komputer semakin lama maka akan berpengaruh pada pekerjaan itu, dan perusahaan akan mengalami kerugian yang sangat besar tentunya.
3.      ganguan skala kecil pada jaringan komputer seperti serangan virus, serangan cracker, kerusakan hardware atau gangguan infrastruktur lainnya

Solusi Penyelesaian Masalah
1.      untuk server kita cukup menggunaka Microsoft Office, karena sudah di lengkapi dengan MS Acces yang nantinya akan di gunakan untuk server database pada perusahaan itu. Dan untuk komputer client kita cukup menggunakan software yang tak berbayar saja, Misalnya Open Office, firefox, Dll
2.      Memang solusi yang mungkin di lakukan adalah menganggarkan dana sebesar $12000 untuk mengupgrade processor dan memory pada komputer server dan client dan sudah termasuk biaya perpanjangan waktu proyek. Karna hal ini nantinya akan sangat berpengaruh terhadap kesuksesan proyek ini
3.      Untuk menghindari komputer dari serangan virus dan cracker, maka perlu membeli lisensi dari antivirus yang Tangguh pastinya, Misalnya AVG, AVIRA, AVAST DLL, Atau bahkan kalo perlu kita Menggunakan Frozen Software untuk client, Dan membeli linsensi security bila sangat di perlukan.

Selasa, 19 Juni 2012

Membuat Paket Installer

Membuat sebuah Installer tentu saja sangat membantu supaya program yang Anda buat dapat berjalan di komputer yang tidak terdapat Visual Basic 6 di dalamnya. Ditambah lagi, Anda juga perlu menambahkan ActiveX-ActiveX pendukung program. Nah, ada sebuah program bawaan Visual Basic yang berfungsi untuk membuat file installer. File installer ini akan membuat paket yang berisi program Anda beserta paket ActiveX yang diperlukan untuk menjalankan program Anda.
Berikut langkah-langkahnya...


1. Klik Start > All Programs > Microsoft Visual Studio 6 > Micorosft Visual Studio 6 > Package & Deployment Wizard.
2. Akan muncul tampilan seperti berikut:
3. Klik browse, pilih lokasi Project yang akan Anda buat installernya. Lalu klik Package. Jika muncul pesan konfirmasi, klik Compile. Akan muncul tampilan seperti ini:
4. Pilih Standard Setup Package, lalu klik Next.  Akan muncul tampilan seperti berikut:
5. Pilih lokasi Anda untuk menyimpan file Installer. Klik Next. (jika muncul kotak dialog konfirmasi, klik saja OK). Akan muncul tampilan seperti ini:
6. Beri tanda cek pada semua file yang berhubungan dengan aplikasi Anda!! (saya sarankan, untuk mencek semuanya saja. Jika Anda menyertakan database dan tidak ada di list, klik saja tombol Add.) Klik Next. Selanjutnya akan muncul tampilan berikut:
7. Pilih saja Single Cab, lalu klik Next. Selanjutnya akan muncul tampilan seperti ini:
8. Ketik judul program Anda! Klik Next. Akan muncul tampilan seperti berikut ini.
9. Anda diminta untuk menentukan lokasi shortcut
10. pada Start Menu. Langsung saja klik next.
11. Klik next. Akan muncul tampilan seperti berikut:
12. Beri saja tanda cek. Klik Next.
13. Beri nama Script, lalu klik Finish.
14. Selesai! Klik saja Close!
Anda bisa melihat hasilnya...

Perintah EXISTS dalam SQL

Seperti halnya perintah IN perintah EXIST juga sering dipergunakan dalam subquery di SQL, walaupun ada sedikit perbedaan cara penulisan keduanya tetapi kita bisa menggunakan salah satu dari perintah ini jika dalam suatu kasus kita harus menggunakan subquery.
Contoh kasusnya begini :
Anda mempunyai sekumpulan data dalam suatu tabel, kita beri nama saja tabel_A berisi {‘1001’, ‘1002’, ‘1003’, ‘1004’, ‘1005’}. Dan Anda juga mempunyai tabel yang lain, anggap saja namanya tabel_B berisi {‘1002’,’1005’,’1006’,’1007’}.
Dari dua tabel ini Anda ingin menampilkan anggota himpunan tabel_A yang juga merupakan anggota himpunan tabel_B.
Kalau kita terjemahkan dalam konsep himpunan, ini merupakan irisan dari dua himpunan. Dan hasilnya {‘1002’,’1005’}.
Tapi Anda harus ingat dalam praktek pengelolaan data nantinya kita harus berhadapan dengan jumlah ribuan data bahkan jutaan data lebih yang harus dikelola cepat. Jadi tidak bisa lagi dengan manual seperti diatas cukup dilihat kita sudah tahu jawabannya. Untuk itu perlu dikelola dengan perintah SQL. Contoh diatas merupakan contoh sederhana tapi sering kali kita ketemu kasus tersebut.
Bentuk perintah SQL-nya sebagai berikut
SELECT* FROM tabel_A a WHERE EXISTS(SELECT* FROM table_B b WHERE b.kode = a.kode)
Silakan dicoba hasilnya sama dengan yang diinginkan.
Kasus kebalikannya juga sering terjadi dalam mengelola database, yaitu Anda ingin menampilkan himpunan tabel_A dimana tidak mengandung suatu anggota himpunan tabel_B.
tabel_A = {‘1001’, ‘1002’, ‘1003’, ‘1004’, ‘1005’}
tabel_B = {‘1002’,’1005’,’1006’,’1007’}
disini terlihat {‘1001’,’1003’,’1004’} bukan merupakan anggota himpunan tabel_B
Dapat diterjemahkan dalam bahasa SQL sebagai berikut :
SELECT* FROM tabel_A a WHERE NOT EXISTS(SELECT* FROM table_B b WHERE b.kode = a.kode)
Dalam perintah ini ada tambahan perintah NOT .
Dalam mencoba perintah-perintah diatas Anda harus mempunyai database sendiri, kemudian di DATABASE tersebut harus CREATE TABLE tabel_A dan tabel_B yang kemudian datanya diisi dengan perintah INSERT ke masing-masing tabelnya. Diharapkan Anda sudah mengerti dalam urusan membuat DATABASE dan CREATE TABLE ini. Soalnya dua urusan ini merupakan sangat fundamental sekali.
Sekedar info, saya membuat perintah-perintah SQL lebih cenderung memakai Query Analyzer kepunyaan Microsoft SQL (SQL Server)

Sumber : http://jnet99.wordpress.com/2008/12/28/perintah-exists-dalam-sql/

Penggunaan Perintah CASE Dalam SQL

Penggunaan Perintah CASE Dalam SQL

mylovePerintah CASE sering digunakan untuk menampilkan nilai tertentu dari beberapa barisan data dengan syarat-syarat atau kondisi yang kita berikan.
Kalau kita belajar bahasa pemrograman tentu kita kenal dengan perintah IF Condition, fungsinya CASE hampir sama. Bedanya perintah CASE digunakan untuk beberapa kondisi sekaligus, dan didalam SQL perintah CASE tidak bisa berdiri sendiri melainkan harus disisipkan dalam perintah SELECT. Jadi berbeda dengan perintah IF yang lebih bebas, akan tetapi perintah IF hanya berguna apabila dimasukan dalam STORE PROCEDURE, FUNCTION dan TRIGGER. Perbedaannya dalam SQL sangat jelas sekali, karena perintah CASE disisipkan dalam perintah SELECT jadi yang dihasilkan langsung berupa DATASET dan langsung bisa dilihat hasilnya.
Perintah CASE ini mempunyai dua format :
1. Simple Case function :
Maksudnya adalah perintah CASE sederhana.
Bentuk Sintaknya
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
2. Searched CASE function:
Maksudnya perintah CASE ini diikuti dengan syarat kondisi boolean, seperti >, <, >=, <= , dan lain-lain.
Sintaknya sebagai berikut.
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
Saya akan memberikan contoh dari kedua jenis CASE tersebut agar dapat bisa membedakan, kapan saat kita memakai Simple Case dan kapan saat kita memakai Search Case.
Terlebih dahulu saya akan memberi contoh Simple Case,
Misalnya kita mempunyai lima kategori penilaian terhadap nilai ujian Mahasiswa.
A = Sangat Baik, B = ‘Baik’, C = ‘Cukup’, D = ‘Jelek’, E = ‘Sangat Jelek’
Dibawah ini ada tabel dasar berupa nilai ujian dari sejumlah Mahasiswa, kita namakan saja tb_nilai
No_induk Nilai
M1001 A
M1002 B
M1003 D
M1004 E
M1005 A
M1006 C
M1007 B
M1008 E
M1009 A
M1010 D
Dari data tersebut kita ingin mengkonversikan nilai-nilai tersebut dengan memakai perintah CASE sehingga menghasilkan barisan data dibawah ini.
No_induk Nilai Keterangan
M1001 A Sangat Baik
M1002 B Baik
M1003 D Jelek
M1004 E Sangat Jelek
M1005 A Sangat Baik
M1006 C Cukup
M1007 B Baik
M1008 E Sangat Jelek
M1009 A Sangat Baik
M1010 D Jelek
Untuk menghasilkan data diatas kita menggunakan skrip SQL sebagai berikut :
SELECT no_induk, nilai,
keterangan =
CASE nilai
WHEN ‘A’ THEN ‘Sangat Baik’
WHEN ‘B’ THEN ‘Baik’
WHEN ‘C’ THEN ‘Cukup’
WHEN ‘D’ THEN ‘Jelek’
ELSE ‘Sangat Jelek’
END
FROM
tb_nilai
Dari skrip SQL tersebut terlihat kita membentuk kolom keterangan yang mana isinya sesuai dengan kondisi CASE.
Berikutnya saya akan memberi contoh Search Case,
Anggaplah kita mempunyai kategori nilai
nilai > 8,5 dapat kategori ‘A’,
nilai >6,5 dan <=8,5 kategori ‘B’
nilai > 5,5 dan <= 6,5 kategori ‘C’
nilai >4,5 dan <= 5,5 kategori ‘D’
Nilai <= 4,5 kategori E.
Dan kita mempunyai tabel kita beri nama saja daftar_nilai dengan isi sebagai berikut
No_induk Nilai
M1001 9
M1002 8
M1003 6
M1004 4.5
M1005 3
M1006 5.5
M1007 8
M1008 7
M1009 6
M1010 6.5
Dan kita ingin menghasilkan suatu dataset yang bentuk tampilannya sebagai berikut :
No_induk Nilai Kategori
M1001 9 A
M1002 8 C
M1003 6 B
M1004 4.5 E
M1005 3 E
M1006 5.5 D
M1007 8 B
M1008 7 B
M1009 6 C
M1010 6.5 C
Maka Skrip yang akan harus ditulis sebagai berikut :
SELECT no_induk, nilai, kategori =
CASE
WHEN nilai > 8.5 THEN ‘A’
WHEN nilai > 6.5 THEN ‘B’
WHEN nilai > 5.5 THEN ‘C’
WHEN nilai > 4.5 THEN ‘D’
ELSE ‘E’
END
FROM daftar_nilai
Kedua contoh diatas merupakan contoh-contoh sederhana dan apabila sudah dipahami dapat dikembangkan lebih lanjut sesuai dengan kebutuhan situasi.
Mudah-mudahan dapat bermanfaat bagi yang suka bermain-main dengan SQL.
Selamat mencoba dan semoga Anda beruntung

sumber : http://jnet99.wordpress.com/2009/02/17/penggunaan-perintah-case-dalam-sql/

Create Trigger dalam SQL

Create Trigger dalam SQL
Trigger merupakan store procedure yang dijalankan secara automatis saat user melakukan modifikasi data pada tabel. Modifikasi data yang dilakukan pada tabel yaitu berupa perintah INSERT, UPDATE, dan DELETE.
INSERT , UPDATE dan DELETE bisa digabung jadi satu trigger yang dinamakan Multiple Trigger.
Bentuk dasar perintahnya :
CREATE TRIGGER nama_trigger
ON nama_tabel
FOR INSERT, UPDATE, DELETE
AS
isi statement-statement Anda disini.
GO
Saya akan memberi contoh sederhana untuk mudah memahami bagaimana cara kerja trigger ini.
Misalkan kita punya data di table DaftarSiswa
DaftarSiswa
Kode Status
1001
1002
1003
Di tabel yang lain kita juga punya tabel Daftar Nilai :
DaftarNilai
Kode Nilai
Daftar nilai ini belum ada isinya yang nantinya akan kita isi dengan perintah INSERT.
Kolom Status pada tabel DaftarSiswa akan kita isi dengan “Lulus” dan “Tidak Lulus” secara automatis saat kita melakukan INSERT dan UPDATE pada tabel DaftarNilai.
Cara membuat dan mengisi kedua tabel diatas :
CREATE TABLE daftarSiswa (kode char(4), status char(10))
CREATE TABLE daftarnilai (kode char(4), nilai float)
Pada tabel DaftarSiswa diisi dengan perintah berikut :
INSERT INTO daftarSiswa VALUES(’1001′,”)
INSERT INTO daftarSiswa VALUES(’1002′,”)


INSERT INTO daftarSiswa VALUES(’1003′,”)
Setelah semuanya dijalankan di Query Analyzer, berikutnya kita akan membuat suatu trigger di tabel daftarNilai.
CREATE TRIGGER tr_status      ON daftarnilai
FOR INSERT, UPDATE
AS
DECLARE @kode char(4)
DECLARE @nilai float
SELECT @kode = kode, @nilai = nilai FROM daftarNilai
IF @nilai >= 60
UPDATE daftarSiswa SET status = ‘Lulus’ WHERE kode=@kode
ELSE UPDATE daftarSiswa SET status = ‘Tidak Lulus’ WHERE kode=@kode
go

Untuk menganalisa lihat isi kedua tabel diatas dengan perintah
SELECT* FROM daftarSiswa
SELECT* FROM daftarNilai
Setelah Anda melihat hasilnya kemudian jalankan perintah dibawah ini :
INSERT INTO daftarNilai values(’1001′,70)
INSERT INTO daftarNilai values(’1002′,50)
INSERT INTO daftarNilai values(’1003′,80)
Setelah dijalankan Anda bisa lihat kembali isi tabel daftarSiswa dan daftarNilai.
DaftarSiswa
Kode Status
1001 Lulus
1002 Tidak Lulus
1003 Lulus
DaftarNilai
Kode Nilai
1001 70
1002 50
1003 80
Disini terlihat saat kita melakukan perintah INSERT di tabel daftarNilai secara otomatis program trigger melakukan pengisian pada tabel daftarSiwa pada kolom “status”
Cukup sampai disini dulu penjelasan saya mengenai TRIGGER

sumber : http://jnet99.wordpress.com/2009/01/21/create-trigger-dalam-sql/

Twitter Delicious Facebook Digg Stumbleupon Favorites More