Dari struktur data ke aplikasi database
Materi ini ditujukan untuk mahasiswa pemula. Delapan pertemuan pertama membangun dasar Oracle SQL dan mini project. Pertemuan09–13 membahas pemrograman PL/SQL serta objek pendukung; pertemuan14 mengintegrasikannya melalui final project.
Studi kasus memakai pelanggan, produk, transaksi penjualan, detail transaksi dan pegawai fiktif. Susunan ini mengikuti silabus yang diperbarui, bukan sekadar mengganti nama judul.
Setiap pertemuan: tujuan dan pokok bahasan → pertanyaan/kuis → teori → contoh dan tabel → video → praktikum → tugas. Hasil praktikum boleh dari Oracle XE lokal atau FreeSQL dengan login.
Alur pembelajaran satu semester
- 01–03: pengenalan/instalasi, DDL, DML dan transaksi.
- 04–07: SELECT/filter, fungsi/agregasi, JOIN dan subquery/query lanjutan.
- 08: Mini Project SQL Oracle, query testing dan presentasi.
- 09–12: dasar PL/SQL, control/loop/exception, cursor/transaksi, procedure/function.
- 13: sequence, view, trigger audit dan package.
- 14: Final Project Oracle & PL/SQL, pengujian serta presentasi.
UTS/UAS, durasi pertemuan dan tenggat mengikuti kebijakan dosen/kalender akademik.
Dua pilihan lingkungan praktikum
Oracle XE: XE lokal dengan SQL Developer: cocok untuk instalasi, koneksi, user/schema, privilege, tablespace serta latihan SQL/PLSQL.
FreeSQL: FreeSQL dengan login: masuk menggunakan akun sendiri dan gunakan schema latihan yang diizinkan untuk SQL/PLSQL. Tidak perlu memasang XE untuk menyelesaikan latihan non-administratif.
Instalasi XE dan perintah administrasi CREATE USER/GRANT/quota/tablespace hanya dilakukan pada XE laboratorium milik sendiri atau dengan izin dosen. Pengguna FreeSQL dapat mempelajari langkah administrasi tersebut secara konseptual, lalu menjalankan pemeriksaan koneksi/schema melalui akun FreeSQL. Jangan mencoba membuat user admin pada layanan FreeSQL.
Jalur A — Oracle XE lokal
- Pelajari DBMS/RDBMS, arsitektur Oracle, instance/database dan PDB pada pertemuan01. Ikuti panduan XE21c sesuai sistem operasi yang didukung installer; jangan menganggap instruksi Windows dan Linux sama.
- Pasang XE dan SQL Developer pada komputer laboratorium/pribadi yang diizinkan. Pada instalasi XE21c default, koneksi latihan memakai localhost, port1521 dan service XEPDB1; service XE menuju root CDB.
- Administrator laboratorium membuat user latihan di PDB dan memberi privilege/kuota yang diperlukan. Mahasiswa memakai user latihan, bukan SYS/SYSTEM untuk menjalankan tugas biasa.
- Jalankan pemeriksaan koneksi/schema, kemudian DDL02 dan DML03.
Jalur B — FreeSQL dengan login
- Buka freesql.com lalu login menggunakan akun sendiri. Gunakan schema/worksheet pribadi yang memiliki izin membuat objek latihan, bukan hanya tampilan baca contoh publik.
- Tidak perlu memasang XE untuk latihan SQL/PLSQL. Perintah administrasi CREATE USER, GRANT admin atau tablespace tidak dijalankan pada layanan ini.
- Jalankan pemeriksaan koneksi/schema, kemudian DDL02 dan DML03 pada schema latihan yang diizinkan. Jika akses membuat objek dibatasi, konsultasikan akses/schema dengan dosen; jangan mencoba mengakali privilege.
- Dokumentasikan kode serta hasil aktual. Tidak perlu menyerahkan kredensial login kepada dosen.
Aturan yang sama untuk kedua jalur
- Run Statement menjalankan satu query; beberapa statement/blok memakai Run Script atau eksekusi terpilih sesuai editor. Periksa dukungan slash dan jangan menaruh slash di tengah blok.
- Aktifkan DBMS_OUTPUT pada editor/koneksi. SET SERVEROUTPUT ON adalah perintah klien kompatibel, bukan statement di dalam BEGIN.
- Untuk COMMIT/ROLLBACK/SAVEPOINT, gunakan sesi yang sama dan periksa autocommit. Pisahkan DDL dari eksperimen transaksi DML karena DDL dapat melakukan implicit commit.
- Hindari DROP/TRUNCATE pada tabel yang masih dipakai modul lain. Contoh DDL destruktif menggunakan tabel latihan terpisah.
Dataset penjualan yang dipakai bertahap
Tabel pelanggan_demo, produk_demo, penjualan_demo, detail_jual_demo dan pegawai_demo dipakai bersama. DDL disiapkan pada pertemuan02; data diisi pada pertemuan03. Citra tidak memiliki penjualan, transaksi103 memiliki pelanggan NULL, Sabun belum memiliki detail transaksi, dan Sari merupakan manajer—kasus ini disengaja untuk JOIN, NULL, agregasi dan SELF JOIN.
SQL setup lengkap — jalankan sekali jika objek/data belum ada
-- Nama: [Nama mahasiswa]
-- NPM: [NPM mahasiswa]
-- Setup sekali pada schema latihan sendiri.
CREATE TABLE pelanggan_demo (
id_pelanggan NUMBER(4) PRIMARY KEY,
nama VARCHAR2(60) NOT NULL,
kota VARCHAR2(30),
email VARCHAR2(80) UNIQUE
);
CREATE TABLE produk_demo (
id_produk NUMBER(4) PRIMARY KEY,
nama_produk VARCHAR2(60) NOT NULL,
harga NUMBER(12,2) NOT NULL CHECK (harga > 0),
stok NUMBER(6) DEFAULT 0 NOT NULL CHECK (stok >= 0)
);
CREATE TABLE penjualan_demo (
id_jual NUMBER(8) PRIMARY KEY,
id_pelanggan NUMBER(4) REFERENCES pelanggan_demo(id_pelanggan),
tanggal DATE DEFAULT SYSDATE NOT NULL,
status VARCHAR2(12) DEFAULT 'BARU' NOT NULL,
CONSTRAINT ck_jual_status CHECK (status IN ('BARU','LUNAS','BATAL'))
);
CREATE TABLE detail_jual_demo (
id_jual NUMBER(8) REFERENCES penjualan_demo(id_jual),
id_produk NUMBER(4) REFERENCES produk_demo(id_produk),
jumlah NUMBER(6) NOT NULL CHECK (jumlah > 0),
harga NUMBER(12,2) NOT NULL CHECK (harga > 0),
CONSTRAINT pk_detail_demo PRIMARY KEY (id_jual,id_produk)
);
CREATE TABLE pegawai_demo (
id_pegawai NUMBER(4) PRIMARY KEY,
nama VARCHAR2(60) NOT NULL,
id_manajer NUMBER(4) REFERENCES pegawai_demo(id_pegawai)
);
INSERT ALL
INTO pelanggan_demo VALUES (1,'Ayu','Subang','ayu@example.test')
INTO pelanggan_demo VALUES (2,'Bima','Bandung','bima@example.test')
INTO pelanggan_demo VALUES (3,'Citra',NULL,NULL)
SELECT 1 FROM dual;
INSERT ALL
INTO produk_demo VALUES (11,'Kopi',30000,20)
INTO produk_demo VALUES (12,'Teh',15000,30)
INTO produk_demo VALUES (13,'Gula',12000,40)
INTO produk_demo VALUES (14,'Sabun',10000,0)
SELECT 1 FROM dual;
INSERT ALL
INTO penjualan_demo VALUES (101,1,DATE '2026-10-01','LUNAS')
INTO penjualan_demo VALUES (102,2,DATE '2026-10-02','BARU')
INTO penjualan_demo VALUES (103,NULL,DATE '2026-10-03','BARU')
SELECT 1 FROM dual;
INSERT ALL
INTO detail_jual_demo VALUES (101,11,10,30000)
INTO detail_jual_demo VALUES (102,12,10,15000)
INTO detail_jual_demo VALUES (103,13,5,12000)
SELECT 1 FROM dual;
INSERT INTO pegawai_demo VALUES (1,'Sari',NULL);
INSERT INTO pegawai_demo VALUES (2,'Rudi',1);
INSERT INTO pegawai_demo VALUES (3,'Tono',1);
COMMIT;Jangan mengulang setup pada schema yang sudah terisi. Lakukan SELECT untuk memeriksa objek/data terlebih dahulu. Sequence, view, audit trigger dan package dipelajari pada pertemuan13; final project14 mengikuti prasyarat objek yang dijelaskan pada halaman tersebut.
Daftar materi / topik 14 pertemuan
14 pertemuan ditampilkan.
| Pertemuan | Materi Utama | Pokok Bahasan / Praktikum |
|---|---|---|
| 01 | Pengenalan & Instalasi Oracle Database | DBMS dan RDBMS; Arsitektur database, instance, SGA, proses, listener, CDB/PDB; Instalasi XE 21c Windows/Linux; SQL Developer localhost:1521/XEPDB1; User dan schema; User praktikum lokal; CONNECT dan RESOURCE; Least privilege dan quota; Tablespace USERS; Alternatif XE lokal atau FreeSQL login |
| 02 | DDL – Data Definition Language | CREATE TABLE; ALTER TABLE; DROP TABLE; TRUNCATE TABLE; RENAME; NUMBER VARCHAR2 CHAR DATE TIMESTAMP CLOB; PRIMARY KEY FOREIGN KEY UNIQUE NOT NULL CHECK DEFAULT; Relasi tabel dan self-reference; Implicit commit DDL |
| 03 | DML – Data Manipulation Language | INSERT; INSERT ALL multi-data; UPDATE bersyarat; DELETE bersyarat; COMMIT; ROLLBACK; SAVEPOINT; Transaksi dan foreign key; Autocommit serta pemilik transaksi |
| 04 | SELECT & Filtering Data | SELECT dan alias; DISTINCT; WHERE dan operator perbandingan; BETWEEN; IN; LIKE; IS NULL; AND OR NOT; ORDER BY ASC DESC NULLS LAST; FETCH FIRST; ROWNUM |
| 05 | Function, Aggregation & Grouping | UPPER LOWER INITCAP SUBSTR LENGTH; ROUND TRUNC angka; SYSDATE ADD_MONTHS MONTHS_BETWEEN; TO_CHAR TO_DATE TO_NUMBER; Format eksplisit dan NLS; COUNT SUM AVG MIN MAX; GROUP BY; HAVING; NULL pada agregasi |
| 06 | JOIN Query | Relasi tabel dan kardinalitas; INNER JOIN; LEFT OUTER JOIN; RIGHT OUTER JOIN; FULL OUTER JOIN; CROSS JOIN; SELF JOIN; JOIN beberapa tabel; Predikat ON dan WHERE; NULL dan granularitas laporan |
| 07 | Subquery & Query Lanjutan | Single-row subquery; Multi-row subquery; Nested subquery; Correlated subquery; IN; EXISTS; ANY; ALL; NULL dan NOT IN; UNION; UNION ALL; INTERSECT; MINUS; CTE WITH |
| 08 | Mini Project SQL Oracle | Schema logis sederhana; Tabel dan constraints; DDL; DML; Data transaksional; JOIN; Aggregate GROUP BY HAVING; Subquery; SAVEPOINT dan ROLLBACK; Pengujian positif dan negatif; Presentasi; Rubrik penilaian |
| 09 | Dasar PL/SQL | Arsitektur PL/SQL engine dan SQL engine; Anonymous block; DECLARE BEGIN EXCEPTION END; Variabel dan konstanta; Assignment :=; %TYPE; %ROWTYPE; DBMS_OUTPUT; SELECT INTO dan kardinalitas; NULL dan scope |
| 10 | Control Structure, Loop & Exception | IF THEN ELSE; ELSIF; Nested IF; Simple CASE; Searched CASE; LOOP; WHILE LOOP; FOR LOOP; EXIT dan EXIT WHEN; NO_DATA_FOUND; TOO_MANY_ROWS; ZERO_DIVIDE; Custom exception dan RAISE; RAISE_APPLICATION_ERROR; Validasi nilai uang |
| 11 | Cursor & Transaction PL/SQL | Implicit cursor SQL; Explicit cursor: DECLARE OPEN FETCH CLOSE; Cursor FOR loop; Parameterized cursor; %FOUND %NOTFOUND %ROWCOUNT %ISOPEN; SELECT INTO dan exception; Transaction: COMMIT ROLLBACK SAVEPOINT; DDL implicit commit |
| 12 | Procedure & Function | CREATE OR REPLACE PROCEDURE; Parameter IN OUT IN OUT; Pemanggilan positional dan named notation; INSERT UPDATE dan transaction owner; CREATE OR REPLACE FUNCTION RETURN; Function dalam SQL; Procedure vs function; Kasus perhitungan jumlah dan harga; USER_ERRORS |
| 13 | Trigger, Sequence, View & Package | CREATE SEQUENCE START WITH 200; NEXTVAL CURRVAL dan sesi; Simple VIEW dan WITH CHECK OPTION; Complex VIEW SUM GROUP BY dan update restrictions; DML trigger BEFORE AFTER INSERT UPDATE DELETE; Row trigger :OLD :NEW; audit_stok_demo trg_audit_stok_demo tanpa COMMIT; Package specification dan body pkg_latihan_demo; USER_ERRORS dan object status |
| 14 | Final Project Oracle & PL/SQL | Lima tabel relational dan constraints; Sequence seq_penjualan_demo; View v_total_penjualan_demo; Trigger audit_stok_demo trg_audit_stok_demo; Package spec/body pkg_penjualan_demo; Function hitung_total(p_jumlah,p_harga) RETURN NUMBER; Procedure proses(p_pelanggan,p_produk,p_jumlah,p_id OUT NUMBER); Validasi integer positif dan harga maksimal dua desimal; FOR UPDATE stock lock; Cursor FOR procedure lapor_stok; Exception dan RAISE_APPLICATION_ERROR; Transaction owner COMMIT ROLLBACK SAVEPOINT; Pengujian USER_ERRORS dan presentasi |
Tugas, pengumpulan dan project
Pengumpulan
Tugas boleh dikerjakan di Oracle XE lokal atau FreeSQL dengan login; cukup pilih salah satu. Kumpulkan satu laporan melalui LMS/kanal yang ditetapkan dosen. Cantumkan Nama, NPM, pertemuan dan lingkungan yang dipakai. Sertakan kode SQL/PLSQL sebagai teks, output aktual atau pesan error, serta jawaban analisis.
Jika FreeSQL menyediakan tautan berbagi yang dapat diakses dosen, tautan boleh ditambahkan sebagai bukti pendamping, bukan pengganti hasil eksekusi yang terdokumentasi. Jangan membagikan password, token atau koneksi pribadi.
Hasil yang belum dieksekusi diberi label “prediksi”. Screenshot ilustrasi browser bukan bukti praktikum Oracle.
Presentasi project: jelaskan skema, jalankan query/proses, tampilkan kasus sukses dan gagal, lalu terangkan integritas serta transaksi.
Rubrik penilaian
- Ketepatan konsep dan rancangan: 20%
- Kebenaran query/program: 30%
- Pengujian normal, batas dan gagal: 20%
- Analisis serta penjelasan hasil: 20%
- Identitas dan kerapian laporan: 10%
Mini project08 menunjukkan penguasaan SQL. Final project14 mengintegrasikan tabel relasional, constraints, sequence, view, procedure, function, cursor, exception, trigger, transaction dan package. Jelaskan batas solusi; contoh kursus bukan aplikasi produksi siap pakai.