Download Materi PL/SQL 3 - Interaksi dengan Server Oracle

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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