Jumat, 24 Oktober 2014

DML dan DDL Oracle PL/SQL

mari melanjutkan belajar,
skli lagi, 
jangan serakah, jangan gegabah, baca satu-satu dan fokus,,


1.         Dapat memahami DDL (Data Definition Language).
2.         Dapat memahami DML (Data Manipulation Language).
3.         Dapat membuat contoh tabel pada query.
4.         Dapat menerapkan command pada tabel.  
SUBJEK  PEMBAHASAN             : CREATE, DROP, ALTER

**************
Pada PL/SQL terdiri dari 4 buah bagin utama yaitu:
1.      DDL (Data Definition Language) : bahasa yang mempunyai kemampuan untuk mendefinisikan data yag berhubungan dengan pembuatan dan penghapusan objek seperti contoh tabel, indeks, nama, dll. Yang termasuk dalam DDL ini yaitu CREATE, DROP, ALTER.
2.      DML (Data Manipulation Language) : bahasa yang berhubungan dengan proses manipulasi data pada tabel, record. Yang termasuk dalam DML ini yaitu: INSERT, UPDATE, SELECT, DELETE.
3.      DCL (Data Control Language) : bahasa yang mengatur hak akses apa saja yang diberikan kepada suatu user. Yang termasuk dalam DCL ini yaitu GRANT dan REVOKE. 
4.      TC (Transaction Control) : bahasa yang mengatur perubahan pada DML terhadap apa saja yang telah dilakukan.

1.      DDL (Data Definition Language)
Dalam database SQL biasanya terdiri dari tabel data dan semua data di dalamnya. DDL ini menggambarkan desain basis data secara keseluruhan dan didefinisikan dengan bahasa khusus. Dengan bahasa tersebut kita bisa membuat tabel baru, membuat indeks, mengubah tabel, mengubah struktur tabel, atau menghapus dabel. Hasil dari kompilasi DDL biasanya merupakan kumpulan dari beberapa tabel yang disimpan dalam file khusus yang disebut Kamus Data.
Yang termasuk dalam bahasa pada DDL yaitu:
1.      CREATE
2.      DROP
3.      ALTER


1.1  CREATE
Perintah CREATE berfungsi untuk membuat. Dalam PL/SQL perintah CREATE ini dapat membuat tabel baru, indeks, prosedur, fungsi, view, dll. Dalam pembahasan ini akan dibahas mengenai fungsi perintah CREATE untuk membuat table. Adapun penulisan perintah CREATE dituliskan sebagai berikut:


CREATE TABLE nama_tabel
(
  Nama_kolom1 tipe_datanya(jumlah_data) [ NULL | NOT NULL ],
  Nama_kolom2 tipe_datanya(jumlah_data) [ NULL | NOT NULL ] 
   ...
);


Pada perintah CREATE TABLE nama_tabel digunakan untuk membuat sebuah tabel baru dan nama_tabel bisa diganti sesuai dengan nama yang diinginkan pada program. Dalam sebuah tabel, pasti terdiri dari baris dan kolom. Oleh karena itu, di dalam perintah CREATE ini juga harus dibuat nama kolom, tipe data yang akan digunakan dan jumlah panjang data yang akan digunakan. Sama seperti variabel, jika jumlah data tidak disebutkan, maka secara otomatis program akan mengartikan bahwa panjang data maksimum akan digunakan. Adapun contoh pembuatan tabel menggunakan perintah CREATE ditunjukkan pada contoh berikut:



CREATE TABLE nilai
(
  nim number(2),
  nama varchar2(7),
  ipa number(2),
  mat number(2),
  bindo number(2),
  bingr number(2),
  rata_rata number(2)
);


Pada tabel diatas menggunakan nama tabel 'nilai’ dengan 7 buah kolom dengan nama dan tipe data yang tidak sama. Untuk menampilkan hasil kompilasi dari pogram, maka dituliskan perintah

  SELECT *FROM nama_tabel

Karena tabel yang telah dibuat yaitu tabel nilai, maka 
NB: tanda * artinya bahwa seluruh kolom dari tabel akan ditampilkan (SELURUHNYA)

  

 SELECT *FROM nilai 


Jika program dijalankan pada aplikasi maka akan menghasilkan tampilan seperti berikut.




Terlihat pada tampilan bahwa setelah dikompilasi struktur tabel mempunyai 7 buah kolom dengan nama kolomnya masing-masing sesuai dengan yang telah dibuat sebelumnya.

1.2  DROP
Perintah DROP ini berfungsi untuk menghapus, bisa untuk menghapus tabel, kolom, view, fungsi, prosedur, dll. Dalam pembahasan ini dibahas mengenai fungsi DROP untuk menghapus tabel atau kolom. Adapun penulisan dari perintah DROP ini dituliskan sebagai berikut:

         DROP TABLE nama_tabel;


Berdasarkan contoh tabel nilai diatas, maka untuk menghapus tabel nilai maka perintah DROP menjadi :


         DROP TABLE nilai;


Setelah perintah DROP dijalankan oleh program dan kita tampilkan tabel nilai maka akan muncul eror seperti berikut:




           
      Hal ini disebabkan karena tabel nilai telah dihapus dan tidak lagi ada pada database. Sehingga program tidak bisa menampilkan tabel dan memunculkan eror.


1.3  ALTER
Perintah ALTER digunakan untuk merubah tabel, dalam hal ini adalah merubah variabel yang digunakan dalam tabel seperti merubah tipe data, merubah jumlah data, dan juga bisa untuk menambah kolom baru.  Berikut dituliskan perintah ALTER:

1.      Untuk menambah kolom baru

ALTER TABLE nama_tabel
  ADD nama_kolom definisi_kolom;

Perintah ALTER juga bisa digunakan untuk menambah beberapa kolom baru sekaligus dengan penulisan

ALTER TABLE table_name
  ADD (nama_kolom1 definisi_kolom,
       nama_kolom2 definisi_kolom,
       ...
       nama_kolom_n definisi_kolom);


Sebagai contoh akan ditambah sebuah kolom baru pada tabel nilai dengan nama kolom ips dengan tipe data number dan panjang data (2), oleh karena itu penulisan perintah menjadi:

ALTER TABLE nilai 
  ADD ips number(2);
     

Maka tampilan dari program yang dijalankan akan muncul sebagai berikut:




Kolom baru IPS



      Perintah ALTER juga berfungsi untuk memodifikasi dari kolom seperti contoh untuk merubah definisi dari tabel. Misal pada tabel nilai, pada kolom nama didefinisikan dengan  varchar2(7). Penulisan perintah ALTER dituliskan sebagai berikut:


    ALTER TABLE nama_tabel
  MODIFY nama_kolom definisi;

      Dengan perintah ALTER kita akan merubah definisi dari nama dengan merubah menjadi varchar2(30). Oleh karena itu penulisan perintah dituliskan sebagai berikut:


  ALTER TABLE nilai 
  MODIFY nama varchar2(30);
      

Sehingga tampilan dari kolom berubah menjadi



lihat NAMA awal



lihat NAMA akhir






      Untuk memodifikasi juga bisa untuk beberapa kolom sekaligus dengan penulisan sebagai berikut:


ALTER TABLE table_name
  MODIFY (nama_kolom1 definisi,
          nama_kolom2 definisi,
          ...
          nama_kolom_n definisi);
    

  Selain itu perintah ALTER dan DROP digunakan untuk menghapus kolom pada tabel dengan penulisan sebagai berikut:


ALTER TABLE nama_tabel
  DROP COLUMN nama_kolom;
     

      Seperti contoh akan menghapus kolom NIM pada tabel nilai maka penulisan menjadi seperti berikut:


ALTER TABLE nilai
  DROP COLUMN nim;
     

 Adapun tampilan pada program setelah dijalankan maka akan menjadi sebagai berikut






awal





Akhir (Kolom NIM hilang)
 






2.      DML (Data Manipulation Language)
Jika pada DDL adalah bahasa untuk mendefinisikan awal mengenai basis data (tabel, view, dll) maka DML merupakan bahasa yang digunakan untuk memanipulasi data dari basis data (dalam hal ini berupa tabel). Manipulasi data dapat berupa:
1.      Penyisipan / penambahan data baru ke dalam tabel
2.      Penghapusan data dari tabel
3.      Pengubahan data dari tabel
Adapun perintah yang termasuk dalam DML ini yaitu :
1.      INSERT
2.      UPDATE
3.      SELECT
4.      DELETE.
2.1  INSERT
Perintah INSERT digunakan untuk menyisipkan / menambah data baru ke dalam tabel. Adapun perintah INSERT dituliskan seperti berikut:

INSERT INTO nama_table (kolom1, kolom2,...)
VALUES(nilai1, nilai2,...);

Sebagai contoh pada tabel nilai diatas akan kita masukkan 5 buah nilai masing-masing pada variabel mat,ipa, bindo dan bingr. Maka, perintah INSERT dituliskan sebagai berikut:




insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(1,'ani',9,8,8,7);
insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(2,'andi',7,8,9,8);
insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(3,'uni',3,4,9,8);
insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(4,'ina',8,5,4,7);
insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(5,'andri',7,10,9,8);
commit;

      Maka tampilan dari hasil program akan menjadi.



2.2  UPDATE
Perintah UPDATE digunakan untuk merubah isi dari kolom (baris) yang diinginkan. Adapun penulisan perintah UPDATE dituliskan sebagai berikut:


UPDATE nama_tabel
SET kolom1 = nilai1,
    Kolom2 = nilai2,
    ...
WHERE kondisi;

            Jika ingin mengupdate semua data maka, perintah WHERE tidak perlu digunakan. Perintah WHERE digunakan jika kita ingin meng-UPDATE data hanya pada kolom-kolom tertentu dengan kondisi tertentu sebagai filter nya. Dari contoh tabel di atas, kita akan mengubah nilai uni (NIM =3) menjadi 8, maka syntax nya menjadi.


             update nilai set ipa =8 where nim=3;





 

 
awal (lihat nilai IPA UNI)

Nilai akhir IPA si UNI




2.3  SELECT
Perintah SELECT pada PL/SQL mempunyai fungsi untuk mengambil (retrieve) informasi dari database. Perintah ini juga mempunyai kemampuan seperti berikut:
Ø  Projection : Memilih kolomkolom dalam suatu tabel yang dihasilkan dari suatu query. Memilih beberapa atau banyak kolom yang dibutuhkan.
Ø  Selection : Memilih barisbaris dalam suatu tabel yang dihasilkan dari suatu query. Banyak kriteria yang dapat digunakan untuk membatasi barisbaris yang akan diambil.
Ø  Joining : Mengambil data bersama yang disimpan dalam tabeltabel yang berbeda dengan menentukan hubungan antara mereka. Joinjoin SQL dijelaskan lebih detail pada pembahasan  selanjutnya.






Untuk mengambil data dari keseluruhan isi tabel, maka perintah SELECT ditulis menjadi

SELECT *FROM nama_tabel;

Telah dicoba sebelumnya menampilkan isi dari tabel nilai dengan menggunakan perintah SELECT dimana akan tampil semua isi dari tabel nilai. Perintah ini juga bisa menampilkan hanya salah satu atau beberapa kolom yang akan ditampikan dengan penulisan :

SELECT kolom1, kolom2,…,kolom n FROM nama_tabel;
WHERE kondisi;

Selain itu juga perintah ini bisa memfilter data yang akan ditampilkan dengan menggunakan perintah WHERE. Perintah WHERE akan memfilter data yang disesuaikan dengan kondisi yang didefinisikan pada perintah SELECT seperti ditunjukkan pada gambar berikut:


Menampilkan semua isi tabel dengan kondisi NIM<4 br="">



Menampilkan NIM,Nama,dan Nilai IPA dimana NIM<4 o:p="">

 





Selain itu juga, SELECT mempunyai fungsi lain yaitu dapat memasukkan nilai dari suatu variabel ke variabel lain degan menggunakan perintah :

SELECT variabel_awal INTO variabel_tujuan from nama_tabel
WHERE kondisi;




2.4  DELETE
Perintah DELETE berguna untuk menghapus baris dari suatu tabel. Bisa diikuti dengan kondisi yang bersesuaian dengan data baris yang ingin dihapus. Penulisan perintah DELETE ditunjukkan sebagai berikut:


DELETE FROM nama_tabel
WHERE conditions;


Contoh akan dihapus data pada tabel dengan NIM = 1, maka :

Terlihat dari tampilan diatas bahwa pada tabel nilai, dimana NIM = 1 dihapus dan langsung ditampilkan data dari NIM 2 dan seterusnya.


CONTOH 
1.      Buat sebuah contoh tabel dengan 5 buah data dan beberapa buah kolom (terserah).
*****
1.      Tabel dengan 5 buah data

Listing Program:

create table perc
(  
            id varchar2(4),        
name varchar2(30),
            jabatan varchar2(14
            gaji_pokok number(9),
            tunjangan number(9
);
     
insert into perc(id,name,jabatan,gaji_pokok,tunjangan) values(2345,'ARINI','CLERK',1000000,400000);
insert into perc(id,name,jabatan,gaji_pokok,tunjangan) values(4567,'MUSLIM','WORKER',1500000,500000);
insert into perc(id,name,jabatan,gaji_pokok,tunjangan) values(3546,'ANIVA','ITNET',2000000,800000);
insert into perc(id,name,jabatan,gaji_pokok,tunjangan) values(6879,'MALIK','ITSPV',2500000,900000);
insert into perc(id,name,jabatan,gaji_pokok,tunjangan) values(1970,'DAMAR','ITMAN',3000000,1000000);


Tampilan dari hasil compile program:


2.      Buat tabel dengan nama Salary dengan ketentuan :
a.       Buat tabel data dengan 5 orang pada tiap Grade
b.      Hitung tambahan berdasarkan gaji pokok
c.       Tampilkan Gaji baru tiap karyawan
d.      Tampilkan total dari semua gaji karyawan

NIK
NAMA
GRADE
GAJI POKOK
TUNJANGAN
TOTAL
1





2










40






GRADE
GM
SM
MGR
AM
SV
FM
LD
WK
GAJI POKOK
20 JT
15 JT
10 JT
7 JT
5 JT
4 JT
3 JT
2 JT
TUNJANGAN
5 JT
3 JT
2 JT
1 JT
0,5 JT
0
0
0
TOTAL
25 JT
18 JT
12 JT
8 JT
5,5 JT
4 JT
3 JT
2 JT
% TAMBAHAN
5%
6%
7%
8%
9%
10%
11%
12%

*****
            Listing Program
--drop table salary;
create table salary(
      nik number(2),
      nama varchar2(10),grade varchar2(3), gapok number(9), tunj number(9), total number(10),primary key(nik)
);
--add by agung pesen memori total gaji lama..
declare
  total_gaji_lama number ;
  total_gaji_baru number ;
  total_effect number ;
  total_emp number;
  v_nik number;
  v_nama varchar2(10);
  v_grade varchar2(3);
  v_gapok number;
  v_tunj number;
  v_total number;

--total = gapok + tunj;
--untuk GM
begin
insert into salary (nik,nama, grade,gapok,tunj,total) values(1,'agung','gm',20000000,5000000,25000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(2,'novie','gm',20000000,5000000,25000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(3,'didik','gm',20000000,5000000,25000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(4,'nurdin','gm',20000000,5000000,25000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(5,'makhrus','gm',20000000,5000000,25000000);

--untuk SM
insert into salary (nik,nama, grade,gapok,tunj,total) values(6,'heri','sm',15000000,3000000,18000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(7,'syarif','sm',15000000,3000000,18000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(8,'resty','sm',15000000,3000000,18000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(9,'ida','sm',15000000,3000000,18000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(10,'cucu','sm',15000000,3000000,18000000);

--untuk MGR
insert into salary (nik,nama, grade,gapok,tunj,total) values(11,'kiki','mgr',10000000,2000000,12000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(12,'lesty','mgr',10000000,2000000,12000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(13,'oji','mgr',10000000,2000000,12000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(14,'rusli','mgr',10000000,2000000,12000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(15,'nina','mgr',10000000,2000000,12000000);

--untuk AM
insert into salary (nik,nama, grade,gapok,tunj,total) values(16,'adi','am',7000000,1000000,8000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(17,'ucok','am',7000000,1000000,8000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(18,'dina','am',7000000,1000000,8000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(19,'andi','am',7000000,1000000,8000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(20,'diah','am',7000000,1000000,8000000);

--untuk SV
insert into salary (nik,nama, grade,gapok,tunj,total) values(21,'dini','sv',5000000,500000,5500000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(22,'bardi','sv',5000000,500000,5500000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(23,'udin','sv',5000000,500000,5500000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(24,'nanang','sv',5000000,500000,5500000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(25,'dimas','sv',5000000,500000,5500000);

--untuk FM
insert into salary (nik,nama, grade,gapok,tunj,total) values(26,'musdi','fm',4000000,0,4000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(27,'apik','fm',4000000,0,4000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(28,'unang','fm',4000000,0,4000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(29,'mita','fm',4000000,0,4000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(30,'safrul','fm',4000000,0,4000000);

--untuk LD
insert into salary (nik,nama, grade,gapok,tunj,total) values(31,'tina','ld',3000000,0,3000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(32,'bunga','ld',3000000,0,3000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(33,'rini','ld',3000000,0,3000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(34,'jefry','ld',3000000,0,3000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(35,'nizam','ld',3000000,0,3000000);

--untuk WK
insert into salary (nik,nama, grade,gapok,tunj,total) values(36,'umar','wk',2000000,0,2000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(37,'lili','wk',3000000,0,3000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(38,'agus','wk',3000000,0,3000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(39,'beni','wk',3000000,0,3000000);
insert into salary (nik,nama, grade,gapok,tunj,total) values(40,'mutia','wk',3000000,0,3000000);


--commit, after insert..
commit;
--clear memory
  total_gaji_lama := 0;
  total_gaji_baru := 0;
  total_effect := 0;

--save total gaji lama
select sum(total) into total_gaji_lama from salary;
dbms_output.put_line('Total Gaji Lama:'|| total_gaji_lama);

--increment
update salary set
      gapok =  round(decode( grade,'gm',(1.05*gapok)
                        ,'sm',(1.06*gapok)
                        ,'mgr',(1.07*gapok)
                        ,'am',(1.08*gapok)
                        ,'sv',(1.09*gapok)
                        ,'fm',(1.10*gapok)
                        ,'ld',(1.11*gapok)
                        ,'wk',(1.12*gapok)),0);
update salary set
       total = gapok + tunj;
  
      commit;
--display new salary ;
 select count(*) into total_emp from salary;
 for i in 1..total_emp loop
            select nik into v_nik from salary where nik = i;
            select nama into v_nama from salary where nik = i;
            select grade into v_grade from salary where nik = i;
            select gapok into v_gapok from salary where nik = i;
            select tunj into v_tunj from salary where nik = i;
            select total into v_total from salary where nik = i;
dbms_output.put_line('Nik:'|| v_nik);
            dbms_output.put_line('Nama:'|| v_nama);
            dbms_output.put_line('Grade:'|| v_grade);
            dbms_output.put_line('Gapok:'|| v_gapok);
            dbms_output.put_line('Tunj:'|| v_tunj);
            dbms_output.put_line('Total:'|| v_total);
 end loop;
--display increment effect
select sum(total) into total_gaji_baru from salary;
total_effect := total_gaji_baru - total_gaji_lama;
      dbms_output.put_line('Total Gaji Lama:'|| total_gaji_lama);
      dbms_output.put_line('Total Gaji Baru:'|| total_gaji_baru);
      dbms_output.put_line('Increment Effect :'|| total_effect  );

end ;









3.      Buat tabel nilai pelajaran siswa dengan ketentuan:
a.       Syarat lulus bagi siswa yaitu nilai rata-rata 6 DAN setiap nilai >=4,5.
b.      Tampilkan urut nilai rata-rata siswa tiap mata pelajaran.
c.       Tampilkan nilai tertinggi tiap mata pelajaran.
d.      Tampilkan siswa terbaik dan nilai-nilanya.

****

Tabel nilai siswa
NIM
NAMA
IPA
MAT
B INDO
B INGR
RATA-RATA
1
ANI
9
8
8
7

2
ANDI
7
8
9
8

3
UNI
3
4
9
8

4
INA
8
5
4
7

5
ANDRI
7
10
9
8


Listing Program :

--drop table nilai;
create table nilai (
     nim number(2),
     nama varchar2(7),
     ipa number(2),
     mat number(2),
     bindo number(2),
     bingr number(2),
     rata_rata number(2)
);

declare

total_stu number;
v_rata number;
v_nim number;
v_nama varchar2(7);

v_ipa number;
v_mat number;
v_bindo number;
v_bingr number;

m_ipa number;
m_mat number;
m_bindo number;
m_bingr number;

--ad by agung
v_total number;
m_total number;
m_terbaik varchar2(7);
m_nim_terbaik number;
--
begin
insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(1,'ani',9,8,8,7);
insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(2,'andi',7,8,9,8);
insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(3,'uni',3,4,9,8);
insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(4,'ina',8,5,4,7);
insert into nilai (nim,nama,ipa,mat,bindo,bingr) values(5,'andri',7,10,9,8);
commit;
update nilai set rata_rata=(ipa+mat+bindo+bingr)/4;
commit;

select avg(ipa)into v_ipa from nilai;
select avg(mat)into v_mat from nilai;
select avg(bindo)into v_bindo from nilai;
select avg(bingr)into v_bingr from nilai;

select max(ipa)into m_ipa from nilai;
select max(mat)into m_mat from nilai;
select max(bindo)into m_bindo from nilai;
select max(bingr)into m_bingr from nilai;

dbms_output.put_line(' nilai rata-rata ipa seluruh siswa: ' || v_ipa);
dbms_output.put_line(' nilai rata-rata matematika seluruh siswa: ' || v_mat);
dbms_output.put_line(' nilai rata-rata b. indonesia seluruh siswa: ' || v_bindo);
dbms_output.put_line(' nilai rata-rata b.inggris seluruh siswa: ' || v_bingr);

dbms_output.put_line(' nilai tertinggi ipa: ' || m_ipa);
dbms_output.put_line(' nilai tertinggi matematika: ' || m_mat);
dbms_output.put_line(' nilai tertinggi b.indo: ' || m_bindo);
dbms_output.put_line(' nilai tertinggi b.inggris: ' || m_bingr);

--add by agung

  select count(*) into total_stu from nilai;
---
v_total := 0;
m_total :=0;
for i in 1..total_stu loop

select nim into v_nim from nilai where nim = i;
select nama into v_nama from nilai where nim = i;
select ipa into v_ipa from nilai where nim = i;
select mat into v_mat from nilai where nim = i;
select bindo into v_bindo from nilai where nim = i;
select bingr into v_bingr from nilai where nim = i;
select rata_rata into v_rata from nilai where nim = i;
select ipa+mat+bindo+bingr into v_total from nilai where nim = i;

     if v_total > m_total then
           m_total :=  v_total ;
           m_terbaik := v_nama ;
           m_nim_terbaik := v_nim ;

     end if;

     dbms_output.put_line('Nim: '|| v_nim);
     dbms_output.put_line('Nama: '|| v_nama);
     dbms_output.put_line('Nilai IPA: '|| v_ipa);
     dbms_output.put_line('Nilai MAT: '|| v_mat);
     dbms_output.put_line('Nilai bahasa indo: '|| v_bindo);
     dbms_output.put_line('Nilai bahasa inggris: '|| v_bingr);
     dbms_output.put_line('Nilai rata-rata semua pelajaran: '|| v_rata);
     if v_ipa >= 4.5 and v_mat >= 4.5 and v_bindo >= 4.5 and v_bingr >= 4.5 and v_rata>=6.0 then
                     dbms_output.put_line('Lulus');
     else
        dbms_output.put_line('Tidak Lulus');
      end if;
  
end loop;

--add by agung
dbms_output.put_line('Siswa terbaik adalah : '|| m_terbaik || 'Total Nilai : ' || m_total);

select ipa into v_ipa from nilai where nim = m_nim_terbaik;
select mat into v_mat from nilai where nim = m_nim_terbaik;
select bindo into v_bindo from nilai where nim = m_nim_terbaik;
select bingr into v_bingr from nilai where nim = m_nim_terbaik;
select rata_rata into v_rata from nilai where nim = m_nim_terbaik;

dbms_output.put_line('Rincian Nilai Siswa Terbaik : '|| m_terbaik || ' Total Nilai : ' || m_total || ', IPA : ' || v_ipa || ', Matematika : ' || v_mat || ', Bhs. Ingris : ' || v_bingr || ', Bhs. Indonesia : ' || v_bindo);




end ;



Tampilan Program:















Tidak ada komentar:

Posting Komentar