Anda di halaman 1dari 6

Hal.

1 dari 6

Fakultas Teknologi Informasi


Universitas Budi Luhur
Ujian Akhir Semester
Tahun Ajaran Genap 2014/2015
Mata Kuliah
PL/SQL
Kelompok
Dosen

: Oracle : Introduction SQL dan


: KU SI (2013)
: Hendri Irawan, S. Kom, M.T.I.

Tanggal
Waktu
Sifat

: 7 Juli 2015
: 120 Menit
: Buka Noted 1 Lembar
A4

NIM : 1312500380
Nama : Imam Halim Mursyidin
Jawablah soal ini (1 10 Bobot 50%):
1. Jelaskan fungsi dari COMMIT dan ROLLBACK
Jawaban:
COMMIT, Perintah COMMIT digunakan untuk mengunci/ mengeksekusi data
secara permanen, sehingga Setiap perubahan data yang dicommit tidak dapa
dikemabalikan seperti semula.
ROLLBACK, Perintah Rollback digunakan untuk mengakhiri transaksi dan
membatalkan perubahan-perubahan yang dibuat selama transaksi. Rollback
berguna untuk dua alasan. Pertama, jika kita membuat kesalahan ketika
menghapus baris data dari table, rollback mengembalikan data pertama.
Kedua, jika kita memulai transaksi yang tidak dapat kita selesaikan karena
munculnya exception atau gagalnya perintah SQL, rollback mengijinkan kita
untuk kembali ke titik awal untuk melakukan pembetulan dan mungkin
mencobanya lagi
2. Jelaskan persamaan dan perbedaan dari Basic Loop (Loop), While Loop, For
Loop
Jawaban:
PERSAMAAN
Menggunakan DECLARE
PERBEDAAN
Perbedaan while loop dengan basic loop, perbedaannya dengan basic
loop jelas kalo basic loop tidak perlu adanya kondisi awal sedangakan while
loop perlu adanya kondisi awal dimana, jika kondisi awal bernilai true maka
perulangan akan di laksanakan dan jika kondisi awal bernilai false maka
bagan perulangan tidak akan pernah dimasuki atau dilakukan eksekusi
apapun.
perbedaan for loop dengan basic loop, basic loop memiliki operasi
increment sedangkan pada for-loop tidak ada operasi increment seperti
j:=j+1, dan batas perulangan yang berbeda dimana basic loop memiliki
batasan perulangan diakhir bagan perulangan sedankan for-loop ini memiliki
batasan perulangan yang sudah di tentukan atau di definisikan langsung
terlebih dahulu nilai awal dan batasan akhir perulangan sebelum atau di atas
bagan perulangan
Perbedaan for loop dengan while loop, hampir sama dengan perbedaan
antara for-loop ini dengan basic loop, perbedaan for loop dengan while loop ini
yaitu tidak adanya operasi increment dalam for-loop, sedangkan di while-loop
ada, dan spesifik perbedaannya juga terlihat adanya nilai konisi awal pada
while loop yang berada sebelum bagan perulangan dan batasan perulangan
yang berada di akhir perulangan.
sedangkan for-loop disini sudah jelas di definisikan sebagai perulangan yang
sering di gunakan untuk suatu perulangan yang sudah diketahui berapa
banyaknya akan terjadi perulangan. maka nilai atau output pertama dan
batasan atau output akhir dari perulangan for loop sudah di definisikan
terlebih dahulu di atas bagan perulangan.

3. Jelaskan apakah perbedaan antara SQL dengan PL/SQL

Hal. 2 dari 6

Jawaban:
SQL adalah bahasa deklaratif untuk database yg sudah distandarkan secara
internasional (ANSI dan ISO), jadi seharusnya semua database yg
menggunakan SQL standar akan memiliki statement/syntax yg sama, baik di
Oracle, MySQL atau database lainnya.
PL/SQL adalah ekstensi dari SQL dengan menambahkan fungsi bahasa
prosedural. Berbeda dengan SQL yg hanya mementingkan bagaimana
mendapatkan hasil, dengan PL/SQL juga akan diketahui bagaimana proses
untuk mendapatkan hasil tsb. Karena PL/SQL merupakan bahasa prosedural,
maka statement/syntax yg digunakan sangat tergantung dari jenis bahasa yg
diadopsi.

4. Jelaskan perbedaan antara Function dan Procedure


Jawaban:
Procedure yaitu sub program yang digunakan untuk melakukan proses
tertentu dan tidak mengembalikan nilai, bisa disimpan dalam database
sebagai object skema, sehingga suatu procedure bisa digunakan berulangkali
tanpa harus melakukan parsing dan compile ulang.
Function yaitu Sebuah kumpulan Statement yang akan mengembalikan
sebuah nilai balik pada pemanggilnya. Nilai yang dihasilkan Function harus
ditampung kedalam sebuah variabel.
Perbedaan function dan procedure, yaitu :
Perbedaan antara function dan procedure adalah : kalau function dia akan
mengembalikan suatu nilai pada pemanggilnya, sedangkan kalau procedure dia tidak
akan mengembalikan nilai apapun pada fungsi pemanggilnya

5. (auto commit = off)


Awal Transaksi
Table Regions
Menampilkan table Regions

Time

Menambah data Region id = 5 , nama = Australias


Savepoint to A
Menghapus seluruh record di table Regions
Rollback to A
Mengubah data Australias menjadi Australia
Savepoint to B
Menghapus data yang Id Regionnya 5
Rollback to A
Commit;
Rollback;
Akhir Transaksi
Tuliskan isi record apa saja yang ada pada Table Regions setelah akhir transaksi
diatas
Jawaban:
REGION_ID

REGION_NAME

Europe

Americas

Asia

Middle East and Africa

Hal. 3 dari 6

TULISKAN SELECT STATEMENT


Soal)

Australias

UNTUK SOAL 6 10 (Entity Class HR pada Akhir

6. Perintah untuk Menambah record baru di table Regions yaitu Australia

Jawaban:
Insert into Regions values (5,'Australias');
7. Perintah untuk Merubah no telepon karyawan 102 menjadi 515.123.1234
Sebelum

Sesudah

Jawaban:
Update employees set phone_number ='515.123.1234'
Where employe_id=102;
8. Perintah untuk Menghapus data region di table Regions yang tidak memiliki
hubungan atau tidak ada (region_id) di table countries
Jawaban:
DELETE FROM regions
WHERE REGION_ID <> ALL(select region_id from countries);

9. Perintah untuk membuat table copy_employee100 beserta isinya. Table tersebut


berisi Nama, email, no telepon, id pekerjaan, id departemen dari karyawan yang
bekerja di departemen 100
Table copy_employees100

Jawaban:
CREATE TABLE copy_employee100 as select first_name ||' '|| last_name Nama,
email,phone_number, job_id, department_id
From employees
WHERE department_id=100;
10. Perintah untuk membuat view dengan nama vempSA_MAN yang berisi Nama, Email,
No Telepon, Id Pekerjaan, Id Departemen dan salary dari karyawan yang memiliki
salary diatas 10000 dan memiliki Id Pekerjaan SA_MAN

Hal. 4 dari 6

View vempSA_MAN

Jawaban:
CREATE view
vempSA_MAN as select first_name ||' '|| last_name Nama, email,phone_number,
job_id, department_id
FROM employees
WHERE salary >10000 and job_id='SA_MAN';
11. Buatlah sebuah fungsi untuk menampilkan grade dan status kelulusan, dengan
ketentuan sebagai berikut (Bobot 30%) :
Nama Fungsi : FGrade(NilAbsen, NilUts, NilUas)
Parameter
Total = (0.1 * NilAbsen) + (0.4 * NilUts) + (0.5 * NilUas)
Grade A := 80 <= Total <= 100
Grade B := 70 <= Total < 80
Grade C := 60 <= Total < 70
Grade D := 40 <= Total < 60
Grade E := 0 <= Total < 40
Status A, B, dan C = Lulus
Status D dan E
= Tidak Lulus
Contoh jika dijalankan:
Select FGrade(90,69,73) from Dual;
Result yang diminta akan mengembalikan nilai:
Grade B Status Lulus
Jawaban:
CREATE OR REPLACE FUNCTION
FGrade(nilabsen NUMBER, niluts NUMBER, niluas Number)
RETURN VARCHAR2 IS
total NUMBER(3);
grade VARCHAR2(30);
BEGIN
total := (0.1 * nilabsen) + (0.4 * niluts) + (0.5 * niluas);
IF total >= 80 THEN
grade := 'Grade A Status Lulus';
ELSIF total < 80 AND total >= 70 THEN
grade := 'Grade B Status Lulus';
ELSIF total < 70 AND total >= 60 THEN
grade := 'Grade C Status Lulus';
ELSIF total < 60 AND total >= 40 THEN
grade := 'Grade D Status Tidak Lulus';
ELSE grade := 'Grade E Status Tidak Lulus';
END IF;
RETURN grade;
END FGrade;
/

Hal. 5 dari 6

Select FGrade (90,69,73) from Dual;

12. Perintah PL/SQL (Explicit Cursor) untuk menampilkan Nama Karyawan, Nama
Pekerjaan, Nama Departemen, gaji dari karyawan yang memiliki gaji diatas 12000
urut berdasarkan namanya.
Eksepsi: Jika tidak ditemukan maka akan menampilkan Data Tidak Ada (Bobot
20%), Hasil:

John Russell-Sales Manager-Sales-14000


Karen Partners-Sales Manager-Sales-13500
Lex De Haan-Administration Vice President-Executive-17000
Michael Hartstein-Marketing Manager-Marketing-13000
Neena Kochhar-Administration Vice President-Executive-17000
Steven King-President-Executive-24000
Jawaban:
SET SERVEROUTPUT ON
DECLARE
CURSOR emp_cursor IS
SELECT a.first_name, a.last_name, c.job_title, b.department_name, salary
FROM employees a, departments b
WHERE a.department_id = b.department_id
AND salary >= 12000;
fname employees.first_name%TYPE;
lname employees.last_name%TYPE;
dname departments.department_id%TYPE;
job employees.job_id%TYPE;
sal employees.salary%TYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO fname, lname, dname, job, sal;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(fname||' '||lname||'-'||dname||'-'||job||'-'||sal);
END LOOP;
CLOSE emp_cursor;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE ('Data Tidak Ada');
END;

Hal. 6 dari 6

Entity Class

= Selamat Mengerjakan =
Hens