4/20/2010 Pedoman Sintak PL/SQL D Danny Kriestanto K i t t Based on Oracle 9i: Program with PL/SQL Student Guide 1 Oleh karena PL/SQL merupakan ekstensi dari SQL, aturan‐aturan yang diaplikasikan pada SQL juga berlaku pada bahasa PL/SQL. Sebuah baris pada teks PL/SQL terdiri atas sekelompok k k yang dikenal karakter dik l dengan d nama lexical unit, yang dapat l i l i d diklasifikasikan sebagai berikut: Delimiter, bisa berupa simbol sederhana (seperti: +, ‐, *, /, =, @, atau ;) atau simbol kombinasi (seperti: <>, !=, ||, ‐‐, /*, */, atau :=) Identifier, harus dipisahkan dengan spasi atau tanda baca Literal, tidak boleh ada spasi, kecuali untuk string, tanggal Komentar, boleh menggunakan spasi Identifier Contoh yang benar Maksimum terdiri atas 30 karakter pohon$$$uang Harus dimulai dengan karakter alfabet SN## Dapat terdiri atas angka, tanda dolar, garis bawah coba_lagi_ ( d ) (underscore) Tidak boleh terdiri atas karakter seperti: ‐ , / , dan spasi Tidak boleh memiliki nama yang sama dengan nama kolom pada tabel Tidak boleh terdiri atas reserved words. Contoh yang salah Pedoman Sintak PL/SQL titik&garis Literal Literal berupa karakter dan tanggal harus diapit dengan menggunakan tanda petik tunggal Literal merupakan sebuah angka, karakter, string, atau angka karakter string atau nilai Boolean yang tidak direpresentasikan oleh identifier, contoh: 300 adalah literal numerik, dst. jumlah‐debit on/off user id v_name := ‘Henderson’; Tanda garis miring (/) digunakan untuk menjalankan blok PL/SQL dalam sebuah file skrip atau tool lain seperti iSQL*Plus. 1 4/20/2010 Pemberian Komentar pada Kode Prefiks yang digunakan untuk memberikan komentar satu baris adalah dua tanda dash (‐‐) Letakkan komentar multi‐baris di antara simbol /* dan */ Contoh: DECLARE ……… v_sal NUMBER(9,2); BEGIN /* Hitung gaji tahunan berdasarkan gaji bulanan dari setiap pegawai */ v_sal := :g_gaji_blnan * 12; END; -- Akhir dari blok Contoh Fungsi SQL di PL/SQL Membuat mailing list untuk perusahaan v_alamat_mail := v_nama ||CHR(10)|| v_alamat || CHR(10)||v_propinsi ||CHR(10) ||CHR(10)||v_kodepos; p CHR merupakan fungsi untuk mengubah kode ASCII menjadi karakter. 10 merupakan kode untuk line feed. Mengkonversi nama pegawai menjadi huruf kecil v_namap := LOWER(v_namap); Fungsi SQL di PL/SQL Yang tersedia pada pernyataan prosedural: Single Row number Single Row character Konversi tipe data Sama seperti pada SQL Tanggal Timestamp GREATEST dan LEAST Fungsi‐fungsi lain Tidak tersedia pada pernyataan prosedural: DECODE Fungsi Group, seperti AVG, MIN, MAX, SUM, STDDEV, VARIANCE, yang hanya boleh digunakan di dalam pernyataan SQL pada blok PL/SQL Konversi Tipe Data Mengubah data ke tipe data yang bersesuaian Mencampurkan tipe data dapat menyebabkan error dan mempengaruhi unjuk kerja Fungsi konversi: TO CHAR O_C TO_DATE TO_NUMBER DECLARE v_tgl DATE := TO_DATE(’12-JAN-2001’, ‘DD-MONYYYY’); BEGIN ……… Konversi Tipe Data Blok Berkalang dan Ruang Lingkup Variabel Pernyataan di bawah ini menghasilkan error sewaktu Blok PL/SQL dapat ditulis secara berkalang (nested) di dikompilasi jika variabel v_date dideklarasikan sebagai tipe data DATE v date : v_date := ‘Januari Januari 13, 2001’; 2001 ; Agar pernyataan tersebut menjadi benar, gunakan konversi TO_DATE seperti berikut. v_date := TO_DATE(‘Januari 13, 2001’, ‘Month DD, 2001’); manapun pernyataan executable diijinkan. Sebuah blok berkalang akan menjadi pernyataan ((statement). ) Sebuah exception dapat terdiri dari blok berkalang Ruang lingkup sebuah identifier adalah di dalam area sebuah unit program (blok, subprogram, atau paket) dimana identifier direferensi. Semua identifier yang berada di dalam blok PL/SQL dianggap lokal di dalam blok tersebut dan global untuk semua subblok yang ada di dalamnya. 2 4/20/2010 Blok Berkalang dan Ruang Lingkup Variabel Ruang Lingkup Identifier Contoh: … x BINARY_INTEGER; BEGIN Ruang lingkup variabel x … DECLARE y NUMBER; BEGIN Ruang lingkup variabel y y := x; END; … END; Sebuah identifier sifatnya visibel pada daerah dimana identifer tersebut dideklarasikan dan pada semua subblok, prosedur, dan fungsi. Jika sebuah blok tidak menemukan identifier, dideklarasikan identifier dideklarasikan secara global, global blok tersebut: Akan melihat ke atas dari blok induknya Tidak akan melihat ke bawah ke bagian subbloknya. Menentukan Ruang Lingkup Variabel Mengkualifikasi Sebuah Identifier Qualifier dapat berupa label dari sebuah blok tertutup Kualifikasikan sebuah identifier dengan menggunakan prefik label Latihan <<outer>> DECLARE v_gaji NUMBER(7,2) := 60000; v_komisi NUMBER(7,2) := v_gaji * 0.20; v_p pesan VARCHAR2(255) := ‘ memenuhi syarat pemberian komisi’; ( ) y p ; BEGIN DECLARE v_gaji NUMBER(7,2) := 60000; v_komisi NUMBER(7,2) := v_gaji * 0.20; v_total NUMBER(7,2) := v_gaji + v_komisi; BEGIN v_pesan := ‘KASIR tidak ’ || v_pesan; outer.v_komisi := v_gaji * 0.30; pada blok <<outer>> DECLARE tgllahir DATE; BEGIN DECLARE tgllahir DATE; BEGIN …… outer.tgllahir := TO_DATE(’03-AUG-1976’, ‘DD-MONYYYY’); END; …… END; 1 END; v_pesan := ‘SALESMAN ’ || v_pesan; 2 END; Operator pada PL/SQL Logika Operator Aritmetika Penggabungan Tanda kurung untuk mengontrol urutan operasi Operator eksponensial (**) Prioritas Operator Sama spt pada SQL Operasi ** Pemangkatan *, ‐ Identitas, negasi ,/ *, / +, ‐, || Perkalian, pembagian ,p g Penambahan, pengurangan, penggabungan =, <, >, <=, >=, <>, !=, ~=, ^=, IS NULL, LIKE, BETWEEN, IN Perbandingan NOT Negasi logika AND OR Konjungsi Inklusi 3 4/20/2010 Operator pada PL/SQL Panduan Pemrograman Contoh: Increment hitung untuk sebuah loop v_hitung := v_hitung +1; Menentukan flag nilai boolean v_sama := (v_n1 = v_n2); Validasi apakah nomor pegawai memiliki sebuah nilai v_valid := (v_nopeg IS NOT NULL); Aturlah agar maintenance kode menjadi lebih mudah dengan: Mendokumentasikan kode dengan komentar. Mengembangkan M b k sebuah b h kaidah k id h pengkodean k d untuk k setiap kasus. Mengembangkan kaidah penamaan untuk identifier dan objek‐objek lain. Meningkatkan kemudahan dalam pembacaan dengan pemberian inden. Contoh Kaidah Kode Memberikan Inden pada Kode Kategori Kaidah Pengkodean Contoh Pernyataan SQL Huruf Besar SELECT, INSERT DECLARE, BEGIN, IF Kata‐kata kunci Pl/SQL Huruf Besar Tipe data Huruf Besar VARCHAR2, BOOLEAN Identifier dan parameter Huruf Kecil v_gaji, pegawai_kursor, g_gaji, p_nopeg Tabel dan kolom pada database Huruf Kecil employees, employee_id, department_id Contoh ada di depan 4