Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
4/26/2010 PERNYATAAN SQL DI PL/SQL Danny Kriestanto Based on Oracle 9i: Program with PL/SQL Student Guide 1 INTERAKSI PL/SQL DENGAN SERVER ORACLE PERNYATAAN SELECT PADA PL/SQL Mengambil data dari database dengan perintah SELECT Sintak: SELECT daftar_select INTO {nama_variabel [,nama_variabel]… | nama_record} FROM nama_tabel [WHERE kondisi]; Mengekstrak baris data dari database dengan menggunakan perintah SELECT Membuat perubahan pada baris di dalam database dengan menggunakan perintah DML Kontrol transaksi dengan perintah COMMIT, ROLLBACK, atau SAVEPOINT Menentukan hasil DML dengan atribut kursor implisit Beberapa hal yang perlu diingat: Kata kunci END berarti akhir dari blok PL/SQL, bukan arti dari transaksi PL/SQL tidak mendukung perintah DDL secara langsung PL/SQL tidak mendukung DCL seperti GRANT dan REVOKE PERNYATAAN SELECT PADA PL/SQL Klausa INTO harus ada Query harus mengembalikan satu dan hanya satu baris Contoh: DECLARE v_nodep NUMBER(4); v_kode_lokasi NUMBER(4); BEGIN SELECT department_id, location_id INTO v_nodep, v_kode_lokasi FROM departments WHERE department_name = ‘Sales’; … END; / MENGAMBIL DATA DARI PL/SQL MENGAMBIL DATA DARI PL/SQL Mengambil tanggal mulai bekerja dan gaji dari seorang karyawan Contoh: DECLARE v_hire_date employees.hire_date%TYPE; v_salary employees.salary%TYPE; BEGIN SELECT hire_date, salary INTO v_hire_date, v_salary FROM employees WHERE employee_id = 100; … END; / Tampilkan jumlah gaji dari semua pegawai dalam departmen tertentu Contoh: SET SERVEROUTPUT ON DECLARE v_tot NUMBER(10,2); v_nodep p NUMBER NOT NULL := 60; ; BEGIN SELECT SUM(salary) --fungsi grup INTO v_tot FROM employees WHERE department_id = v_nodep; DBMS_OUTPUT.PUT_LINE(‘Total jumlah gaji adalah ‘|| TO_CHAR(v_tot)); END; / 1 4/26/2010 KAIDAH PENAMAAN MANIPULASI DATA MENGGUNAKAN PL/SQL DECLARE hire_date employees.hire_date%TYPE; sysdate hiredate%TYPE; employee_id employees.employee_id%TYPE := 176; BEGIN SELECT hire_date, sysdate , sysdate y INTO hire_date, FROM employees WHERE employee_id = employee_id; END; / Buat perubahan pada tabel database dengan menggunakan perintah DML: INSERT UPDATE DELETE MERGE DECLARE * ERROR at line 1: ORA-01422: exact fetch return more than requested of rows ORA-06512: at line 6 MENAMBAH DATA UPDATE DATA Tambahkan informasi pegawai baru ke dalam tabel employees Contoh: BEGIN INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id, salary) VALUES (employee_seq.NEXTVAL, ‘Ruth’, ‘Cores’, ‘RCORES’, sysdate, ‘AD_ASST’, 4000); END; / Naikkan gaji dari semua pegawai yang adalah stock clerk. Contoh: DECLARE v_tambah_gaji employees.salary%TYPE := 800; BEGIN UPDATE employees SET salary := salary + v_tambah_gaji WHERE job_id = ‘ST_CLERK’; END; / MENGHAPUS DATA MENGGABUNGKAN BARIS DATA Hapus baris yang dimiliki oleh departemen 10 dari tabel employees. DECLARE v_nodep employees.department_id%TYPE := 10; BEGIN DELETE FROM employees WHERE department_id = v_nodep; END; / DECLARE v_nopeg employees.employee_id%TYPE := 100; BEGIN MERGE INTO copy_emp c USING employees e ON (c.employee_id = v_nopeg) WHEN MATCHED THEN UPDATE SET c.first_name = e.first_name; c.last_name = e.last_name; c.email = e.email; … WHEN NOT MATCHED THEN INSERT VALUES (e.employee_id, e.first_name, … , e.department_id); END; / 2 4/26/2010 KAIDAH PENAMAAN KAIDAH PENAMAAN Gunakan kaidah penamaan untuk menghindari ambiguitas dalam klausa WHERE Kolom dan identifier database harus memiliki nama yang berbeda Kesalahan sintaks dapat terjadi karena PL/SQL mengecek nama kolom tabel pada database terlebih dahulu Nama variabel lokal dan parameter formal harus didahulukan daripada nama tabel. Nama dari kolom pada tabel harus didahulukan sebelum nama variabel lokal Identifier Kaidah Penamaan Contoh Variabel v_nama v_gaji Konstanta c_nama c_nama_perusahaan Kursor nama_cursor pegawai_cursor KURSOR SQL ATRIBUT KURSOR SQL Ketika sebuah perintah SQL dijalankan, server Oracle akan membuka suatu area di memori dimana perintah tersebut di-parsing dan dieksekusi. Area ini yang disebut sebagai kursor. Sebuah kursor adalah area kerja privat SQL Ada dua macam kursor: Dengan menggunakan atribut kursor, hasil dari pernyataan SQL dapat ditampilkan. Eksepsi e_nama e_too_many Tipe tabel nama_table_type jumlah_table_type Tabel nama_tabel countries Tipe record nama_record_type peg_record_type Record nama_record customer_record Variabel substitusi untuk iSQL*Plus (parameter substitusi) p_nama p_gaji Variabel pengikat untuk iSQL*Plus g_nama g_gaji_sethn Kursor implisit, dibuat secara otomatis oleh Oracle Kursor eksplisit, dibuat manual oleh programmer Server Oracle menggunakan kursor implisit untuk melakukan parsing dan mengeksekusi perintah SQL ATRIBUT KURSOR SQL Menghapus baris dari kode pegawai tertentu dari tabel employees. Cetak jumlah baris yang dihapus. Contoh: VARIABLE baris_terhapus VARCHAR2(30); DECLARE v_kode_peg employees.employee_id%TYPE := 176; BEGIN DELETE FROM employees WHERE employee_id = v_kode_peg; :baris_terhapus := (SQL%ROWCOUNT || ‘ baris dihapus.’); END; / PRINT baris_terhapus SQL%ROWCOUNT Jumlah baris yang dipengaruhi oleh perintah SQL (bernilai integer) SQL%FOUND Atribut boolean yang bernilai TRUE jika SQL yang dieksekusi mempengaruhi satu baris data atau lebih SQL%NOTFOUND Atribut boolean yang bernilai TRUE jika SQL yang dieksekusi tidak mempengaruhi baris apapun SQL%ISOPEN Selalu bernilai FALSE karena PL/SQL menutup kursor implisit dengan segera setelah dieksekusi (perintah ini sering digunakan di kursor eksplisit) PERNYATAAN KONTROL TRANSAKSI Menginisiasi sebuah transaksi perintah DML pertama setelah melakukan COMMIT atau ROLLBACK. Gunakan COMMIT atau ROLLBACK untuk mengakhiri sebuah transaksi secara eksplisit. 3