Selamat Datang Di Blog "Dadang Suhendra"

Jumat, 07 Januari 2011

Oracle 9i




Cara Membuat database

Start->all Program->Oracle orahome92->Configuration & migration Toll, database configuration Assistant


Pilih create database
Pilih next,Pilih New database
Pilih Next,  Isi nama Global name database = dbsdm ,Isi  SID=dbsdm
Pilih next,   Pilih Dedicated Server Mode
Keterngan setting ada di modul DBA tersendiri.
Pilih next
Pilih next pilih creat database
Pilih Finish, kemudian pilih ok
Tunggu sampai Database Creation in prosess 100%
SYS Password=bs2010  dan isi  Confirm SYS Password=bs2010
SYSTEM Password=bs2010s  dan isi  Confirm SYSTEM Password=bs2010s
Pilih exit



User =system
Password=server
database =serverpm2
Memulai dengan  Oracle bias menggunakan Query Edit : TOAD, SQL Plus, PL/SQL Developer.

Anda mulai masuk ke PL*SQL
SETTING di client
Cari file ntsnames  ada di folder mana
# TNSNAMES.ORA Network Configuration File: F:\System_Oraclex\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

Isi file tnsnames.ora
ORAPM2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = PM2-22)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORAPM2)
    )
  )

INST1_HTTP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = PM2-22)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = MODOSE)
      (PRESENTATION = http://HRService)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC2))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )


F:\System_Oraclex\network\admin\tnsnames
Blok  copy
Langka berikutmya buat 
Buat perintah di emvironment untuk listener ke server yang di tuju

connecting  Orapm202
user=sys
password=pm2
connecr us  sysdba
connecting using =  Oramp21

user=scoott
password=tiger
host string=dbkita
==================================
Kondisi pada system oracle untuk membuat nama user(user name) yang berfungsi bisa mengakses database oracle.
 Sintak perintah  membuat user name adalah :
Create User username identified by  password
quota 10M on users default tablespace users
Sintak perintah  memperbaiki user name adalah :
Alter User username identified by newusername
Sintak perintah  menghapus user name adalah :
Drop User username cascade(menhapus seluruh  object yang dimiliki user)

Contoh  untuk membuat user name dan quota space pada database:
create user cassep identified by h123
  quota 10M on users default tablespace users
lakukan blok Run tombol F5

sql > create user ady identified by firm4n5y4h
  quota 10M on users default tablespace users;
user created
1. create user edwin identified by arlfl14nt0
  quota 10M on users default tablespace users
user created
Mengaktifkan user name untuk mendapatkan fasilitas di database.
Sintak : grant connect, resource to namaUser
2.  grant connect, resource to ady ;
grant succeeded
sql> grant connect, resource edwin;
grant succeeeded 


=======================================
Mengaktifkan User Name untuk bisa membuat table
sql> conn ady/f1rman5y4h@sdm
coneccted
sql> conn
enter user_name :ady
enter password:************
coneccted
Langkah berikutnya anda berhak membuat table pada database oracle.
Type data :  Varchar2(karakter) 4000 byte,  Number(bilangan)1 to 38 , Date(tanggal) sampai 31 desember 9999, char(karakter) 1 Byte.
Sintak membuat table :
Create table nama_tabel (
namaField  number primary key,
namafield_1  number not null,
namafield_2  number default 1,
namafield_3  date default sysdate,
namafield_4  varchar2(50),……..,……….,…….);
Pertemuan ke III
sql> create table karyawan
   (id_kry  number(5),
   namadepan varchar2 (12),
   namabelakang varchar2(12),
   gaji number (9) );

table created.

sql> insert into karyawan
   (id_kry, namadepan, namabelakang,gaji)
   values (1001, 'hengki','anwar',2000000) ;
1 row created.

sql> insert into karyawan
   (id, namadepan , namabelakang,gaji)
   values (1002,'adrian','riyanto',1900000);
1 row created

sql> insert into karyawan
   (id,namadepan,namabelakang,gaji)
  values (1003,'zakaria',' ',2100000);
1 row created.

sql> insert into karyawan
  (id, namadepan, namabelakang, gaji)
  values (1004,'adi','koncara',18500000);
  1 row created.
   insert into lembur value(L001,to_date('01 12, 2010','dd MM ,YYYY'),K005)
sql> insert into karyawan
  (id, namadepan, namabelakang, gaji)
   values (1005,'anita','setyorini',19500000);
1 row created
sql> insert into karyawan
   (id, namadepan, namabelakang, gaji)
   values (1006,'muthia','chrisye',2300000);
1 row created.
Select * from karyawan
id          namadepan
-----       -------------
1001   hengki
1002   adrian
1003   zakaria
1004   adi
1005    anita
1006    muthia
6 rows selected.

sql>select id, namadepan from karyawan;
sql> select id, namadepan, namabelakang, gaji from karyawan;
id     namadepan     namabelakang      gaji
-------     ---------------   ---------------  ---------
1001    hengky           anwar             2000000
1002    adrian        riyanto            1900000
1003    zakaria                              2100000
1004    adi                  koncara           1850000
1005    anita         setyorini          1950000
1006    muthia     chrisye            2300000
6 rows selected.

Pertemuan ke IV

Sintak mengganti nama table :
 Alter table nama_tabel_lama rename to nama_table baru
Sintak menambah field baru pada  nama table :
 Alter table nama_tabel add(nama_field_1  typedata, nama_field_2  typedata)
Sintak mengganti nama field  pada  nama table :
Alter table nama_tabel modify nama_field_1  typedata
Sintak menghapus nama field pada  nama table :
 Alter table nama_tabel drop column nama_field
1.          Lakukan penambahan Field Jenis_kelamin pada table Karyawan.
2.          lakukan perintah desc karyawan(melihat struktur table)
3.          Lakukan perubahan data dapa jenis kelamin semua diisi  dengan kode “L” dan tampilkan hasil perubahan
4.          Lakukan perubahan data dapa jenis kelamin berasarkan ID_kry dengan kode “P” atau “L” dan tampilkan hasil perubahan
5.          Lakukan penambahan Field  Kode_jabatan pada table Karyawan dan isi datanya MM,DD,ST,OB(bebas),tampilkan hasilnya
6.   Ganti nama field kode_jabatan menjadi id_jabatan
7.          Lakukan penambahan Field  tnj_jabatan pada table Karyawan dan isi datanya berdasarkan MM=2000000,DD=1500000,ST=0,OB=200000,tampilkan hasilnya
8.          Lakukan perubahan data Field  tnj_jabatan pada table Karyawan dan isi datanya  di rubah MM=2000000 menjadi MM= 3000000,tampilkan hasilnya
9.   Buat table jabatan(id_jabatan,nama_jabatan,Tnj_jabatan) isi datanya sesuai denga yang di atas MM,Menejer,3000000===> DD,Drektur, 4000000,èST,staf,0è OB, Office Boy,200000






sql> select namadepan, gaji,gaji*1.1, gaji-500000 from
karyawan;
namadepan          gaji     gaji*1.1        gaji-500000
------------  ------------ ------------   ---------------
hengky        2000000      2200000           1500000
adrian        1900000      2090000           1400000
zakaria       2100000      2310000           1600000
adi              1850000      2035000           1350000
anita          1950000      2145000           1450000
muthia        2300000      2530000           1800000

6 rows selected.

sql> select 71+21 from dual;
-----------------------------
               92

sql> select namadepan, gaji* 0.1 bonus from karywan;
namadepan          gaji       bonus
---------------  ----------- -------
hengky           2000000      200000
adrian           1900000      190000
zakaria          2100000      210000
adi              1850000      185000
anita            1950000      195000
muthia           2300000      230000
6 rows selected.

sql> select namadepan, gaji
 from karyawan;

error at line 2 :
ora-00942: table or view does not exist

sql>select * from karyawan
namadepan           gaji
------------            --------------
hengky                  2000000
adrian                    1900000
zakaria                  2100000
adi                   1850000
anita                      1950000
muthia                   2300000
6 rows selected.


sql>select namadepan, gaji    from karyawan order by namadepan desc;
namadepan        gaji
------------      --------------
zakaria            2100000
muthia             2300000
hengky            2000000
anita                1950000
adrian              1900000
adi            1850000

6 rows selected.
Penggunaan Where  untuk memfilter data atau hanya sebagian data yang di tampilkan berdasarkan kondisi   gaji>2000000.
Operator  ::  = , !=, < ,> , <=, >= , and/or ,is null, is not null,in , not in
sql>select namadepan, gaji
   from karyawan  where gaji>2000000;

namadepan        gaji
------------ --------------
zakaria        2100000
muthia         2300000

2 rows selected.
   sql>select namadepan, gaji
   from karyawan  where gaji != 2000000;
namadepan        gaji
------------ --------------
zakaria            2100000
muthia             2300000
anita                1950000
adrian              1900000
adi            1850000

5 rows selected.

sql>select namadepan, gaji    from karyawan  where gaji>2000000 and namadepan LIKE '%ia';

namadepan        gaji
------------ --------------
zakaria        2100000
muthia         2300000

2 rows selected.

==============================================
menampikan data dari beberapa table

sql>select namadepan, namabelakang , kodearea    from manager
namadepan       namabelakang  kodearea
------------ --------------   ------------
zakaria        edwin                  22 
muthia         puspita sari                21
anita          rahayu                         31
adrian         johan              22
adi            baharudin               21

5 rows selected.
 sql>select kodearea, kota  from area;
  kodearea       kota    
------------ --------------   ------------
   22                 Jakarta
   21                 Bandung
   31                 Surabaya
 
3 rows selected.

SQL> SELECT a.namadepan, a.namabelakang, b.kota
   FROM manajer a, area b WHERE a.kodearea = area.kodearea;

NAMADEPAN  NAMABELAKANG KOTA
----------- --------------    -------------
Diah           Puspita                  Jakarta
Jimmy       Ardianto          Jakarta
Edwin        Djkaria            Bandung
Ahmad       Seaful              Bandung
Rezki         Yunus              Surabaya

SQL> SELECT manajer.namadepan, manajer.namabelakang, area.kota
   FROM manajer, area
    WHERE manajer.kodearea = area.kodearea;

SQL> SELECT a.namadepan, a.namabelakang, b.kota    FROM manajer, area b
    WHERE a.kodearea=b.kodearea
 
NAMADEPAN  NAMABELAKANG KOTA
----------- --------------    -------------
Diah           Puspita                  Jakarta
Jimmy       Ardianto          Jakarta
Edwin        Djkaria            Bandung
Ahmad       Seaful              Bandung
Rezki         Yunus              Surabaya
Wijayanti   Hartono
Astrid        Luciane

7 rows selected.
Menggunakan fungsi-fungsi yang disediakan oracle
Max(bilangan terbesar), Min(bilangan terbesar), Sum(menjumlahkan ,
count(menghitung banyaknya data), Avg(menhitung  rata-rata) , Abs(menghitung nilai absolute), mod(menghitung bilangan modulus), Pangkat Power(3,2)  hasil  9,pembulatan round(15.193,2) hasilnya  15.23, akar   sqrt(25) hasinya 5, Trunc(15.79,1) hasilnya  15.7
Konversi  To_number(meruhah karakter menjadi angka),To_char(bilanga menjadi karakter), To_date(karakter menjadi tanggal).
SQL> SELECT MAX(gaji), SUM(gaji), COUNT(gaji) FROM karyawan;
MAX(gaji)  SUM(gaji)  COUNT(gakji)
---------   ---------   ----------------------------------------
  2300000  12100000            6
 
 
SQL> SELECT id, namadepan, namabelakang, gaji, kota FROM
KARYAWAN;

            ID NAMADEPAN    NAMABELAKANG       GAJI KOTA
---------- ------------ ------------ ----------- ----------------
            1001 Hengky         Anwar             2000000 Padang
            1002 Adrian          Riyanto                 1900000 Bandung
            1003 Zakaria                           2100000 Surabaya
            1004 Adi          Koncara                1850000 Padang
            1005 Anita      Setyorini         1950000 Bandung
            1006 Muthia          Chrisye                  2300000 Surabaya
           
6 rows selected.


SQL> SELECT kota, AVG(gaji) FROM karyawan     BY kota ORDER BY kota;
 
KOTA               AVG(GAJI)
--------------------------------------------- ---------
Bandung            1925000
Padang                    1925000
Surabaya           2200000


SQL> SELECT kota, AVG(gaji) FROM karyawan     GROUP BY kota      HAVING AVG(gaji) <2000000 ORDER BY kota;
 
KOTA               AVG(GAJI)
--------------- ---------
Bandung                  1925000
Padang                    1925000


SQL> SELECT namadepan FROM manajer      WHERE kodearea =………
  (select kodearae FROM area WHERE kota='Bandung');
 
NAMADEPAN
------------
Edwin
Ahmad

======================================================================
Perintah update melakukan perubahan data pada table sintak sebagai berikut :
update  nama_table set nama_field='isi data yang baru' where  kondisi_1 and/or kondisi_2
contoh :

sql>update  karyawan set namadepan ='adi2010' where namadepan='adi'
sql>select * from karyawan
===================================
perintah delete
sql>delete from karyawan where namadepan='adi2010';
sql> selek * from karyawan

========================================
menggunakan variabel runtime
simpan text file di bawah ini pada notepad dengan extetion karyawan.sql
bisa di pangggil beberapa kali

SELECT namadepan, namabelakang FROM karyawan WHERE id = &id;
SQL> @c:/karyawan.sql
Enter value for id:1005

NAMADEPAN        NAMABELAKANG
--------------- ------------
Anita               Setyorini



=================================
PL/SQL
cara menjalankan simpan di text file jalankan seperti file karyawan.sql
atau diakhir peritah berikan perintah / (slash).

ini adalah perintah dasar dari pembuatan Procedure,function, trigger
---------------------------------
Declare
     Bagian deklarasi-variabel, jenis data, kursor, dan
     subprogram berada di sini.
Begin
     Bagian yang dapat di eksekusi-perintah prosedural, dan
     SQL berada di sini.
     Ini adalah bagian utama dari blok dan mutlak harus ada.
Exception
     Bagian yang mengenai error-perintah untuk mengenai
     error berada di sini.
end;

DECLARE
  /* Awal bagian deklarasi */
  v_Id NUMBER(5) := 1005; -- vARIABEL NUMERIK v_Id
                                      -- dengan nilai awal 1005
BEGIN
  /* Awal bagian yang bisa dieksekusi */
  -- Rubah gaji karyawan yang id-nya 1005 menjadi 3000000
  UPDATE karyawan
    SET gaji = 3000000
      WHERE id + v_Id;
EXCEPTION
  /* Awal bagian yang mengenai error */
  WHEN NO_DATA_FOUND THEN
    -- Bagian yang mengenai error
      -- Masukkan ke tabel tabel_log pesan error
      INSERT INTO tabel_log (informasi)
        VALUES ('Karyawan dengan id 1005 tidak ada!')
        END;
       

contoh penulisan deklarasi
=============================   
DECLARE
  v_NamaDepan VARCHAR2 (12);
  v_Gaji NUMBER(9) := 2500000;

DECLARE
  v_NamaDepan
  v_Gaji karyawan.gaji%type  := 2500000;
 
contoh pennggunaan if

declare
      v_gaji karyawan.gaji%TYPE;
      v_komentar varchar2(35);
Begin
    /*ambil nilai gaji dari tabel karyawan yang namanya Muthia
    simpan nilainya di dalam variabel v_gaji*/
   select gaji into v_gaji from karyawan  where namadepan='Muthia';
    if v_gaji<1700000 then
        v_komentar:='gajinya kecil';
     elsif   vgaji<2000000 then
        v_komentar :='gajinya biasa';
      else
        v_komentar :='gajinya besar';
     endif;
end;


========================
       
contoh pennggunaan loop
jika keluar EXit[when kondisi];
declare
      v_hitung number:=1;
Begin
    /*memasukan sebuah baris ke table temp_table dengan nilai
    sekarang*/
     Loop
       insert into temp_tabel(angka,komentar)
       Values(v_hitung,'percobaan looping')
         v_hitng:=v_hitung+1;
         --kondisi exit jika sudah sampai 50 keluar dr loop
         if v_hitung>50 then
           exit;
         endif;
      end loop;  
end;
                    
==============================                    

contoh pennggunaan While
jika keluar pada kondisi while;
declare
      v_hitung number:=1;
Begin
    /*memasukan sebuah baris ke table temp_table dengan nilai
    sekarang*/
     while v_hitung<=50 Loop
       insert into temp_tabel(angka,komentar)
       Values(v_hitung,'percobaan looping')
         v_hitng:=v_hitung+1;
      end loop;  
end;


==============================
contoh pennggunaan for
declare
      v_hitung number:=1;
Begin
    /*memasukan sebuah baris ke table temp_table dengan nilai
    sekarang*/
   for v_hitung in 1..50 Loop
       insert into temp_tabel(angka,komentar)
       Values(v_hitung,'percobaan looping');
       
      end loop;  
end;


================================
menangani error

declare
      v_id number(5) :=1005;
Begin
    /*menangani error dengan Exception*/
   update karyawan set gaji=3000000
    where id=v_id;
Exception
      when NO_DATA_FOUND THEN
            Insert Into tabel_log(information)
            Values('karyawan tidak di temukan');
       
end;

=============================
penangana error dengan exection menggunakan perintah RAISE

declare
      v_id karyawan.id%TYPE;
      v_gaji karyawan.gaji%TYPE;
      e_gaji_terlalu_kecil exception;   ---variabel exception
     
Begin
    /*menangani error dengan Exception dengan perintah raise*/
  
   if v_gaji<1500000 then  --menangkap error
    RAISE e_gaji_terlalu_kecil;
   end if;
  
   update karyawan set gaji=v_gaji
    where id=v_id;
Exception
      when e_gaji_terlalu_kecil THEN
            Insert Into tabel_log(information)
            Values('gajinya kecil sekali');
       
end;

=====================================================
penggunaan Procedure, Function dan Trigger
perbedana denga yang di atas adalah tdk bisa di panggiloleh blok lain
tetapi dengan penggunaan Procedure, Function
dan Trigger bisa di pangggil dari blok lain
------------------------------------------


Pembuatan  Procedure
Create or replace procedure karyawanbaru ( v_id karyawan.id%TYPE, v_namadepan karyawan.namadepan%TYPE, v_namabelakang karyawan.namabelakang%TYPE, v_gaji     karyawan.gaji%TYPE,  v_jenis_kel  karyawan.jeis_kel%TYPE) as  
Begin
    insert into karyawan(id_kry,namadepan,namabelakang,gaji,jeis_kel)
   values(v_id,v_namadepan,v_namabelakang,v_gaji,v_jenis_kel);
   end karyawanbaru ;
----------------------------------------------------------
desc karyawan
------------------------------------------------------------
cara menggunakan procedur karyawan baru
begin
karyawanbaru(10087,'10007','harun',5500000,'L');
end;
------------------------
Contoh lain :
Create or replace procedure perubahankaryawan ( v_namadepan karyawan.namadepan%TYPE)
 as      
Begin
     update karyawan set id='1006'  where namadepan= v_namadepan;
  
end perubahankaryawan;

begin
perubahankaryawan('Jamilah2');
end;

select * from karyawan   
========================================= 
Pembuatan Function
Create or replace function fjenis_kel( v_id karyawan.id%TYPE)
 return varchar2 is v_hasil varchar2(30);v_jenis varchar(1) ;
Begin
   select jeis_kel into v_jenis  from karyawan where id = v_id;
     if v_jenis='L' then
     v_hasil:='Lakilaki';
     else
     v_hasil:='Perempuan';
     end if;
   return v_hasil;    
end fjenis_kel;
cara memanggil function namalengkap yang di buat
select fjenis_kel(id) "jenis Kelamin" from karyawan;
===============================
pembuatan trigger(pemicu)
perintah pemicu dipengaruhi oleh perintah DML(data manipulation language)
(insert,update,delete)
-     mengatur integrity constrint
-     audit database
-     secara otomatis memberi sinyal jika ada perubahan
pemicu BEFORE(sebelum) dan AFTER(sesudah)
 Create or replace trigger ubah_karyawan
    before delete or update on karyawan
     
Begin
   insert into tabel_audit (nama,waktu,komentar)
   values(user,to_char(sysdate,'MONTH DD,HH24:MI'),'tabel ada yang merubah atau dihapus')
   from karyawan where id=v_id;
   RETURN v_hasil;
end namalengkap;


Tingkat  Lanjut  oracle
--------------------------------
penggunaan constraint,primary key, unique
membuat table dengan constraint
sql> create table karyawan2
   (id number(5),
   namadepan varchar2 (12) not null,
   namabelakang varchar2(12) not null,
   gaji number (9) check(gaji>2000000),
   telp varchar2(10),
   constraint pk_karyawan_01
   primary key (id),
   constraint uk_karyawan_01
   unique(telp));
  
   melihat struktur table
  sql>desc karyawan2;
 -------------------------------------- 
penggunaan foreign key, on delete casde
sql> create table rek_bank_karyawan
   (norekening varchar2(20),
   id number(5),
   namabank varchar2(40) not null,
   constraint pk_norekening
   primary key (norekening),
   constraint fk_rek_karyawan
   foreign key (id) references karyawan2(id)
   on delete cascade);
   masukan data untuk tabel karyawan2
sql> insert into karyawan2
   (id,namadepan , namabelakang,gaji,telp)
   values (1001, 'hengki','anwar',2100000,'021886732') ;
1 row created.
ERROR at line 1:
ORA-02290: check constraint (CASSEP.SYS_C002657) violated
pikirkan error ini apa  ?
ingat gaji harus > 2 juta
sql> insert into karyawan2
   (id,namadepan , namabelakang,gaji,telp)
   values (1002,'adrian','riyanto',2900000,'021-8824536');
ERROR at line 3:
ORA-01401: inserted value too large for column
pikirkan error ini apa  ?
lakukan perintah
sql> desc karyawan2;
space untuk telp hanya 10 digit

sql> insert into karyawan2
   (id,namadepan , namabelakang,gaji,telp)
   values (1003,'zakaria',' ',2100000,'021-882453');
  
ERROR at line 1:
ORA-01400: cannot insert NULL into ("CASSEP"."KARYAWAN2"."NAMABELAKANG")
pikirkan error ini apa ? tdk boleh data kosong
isi data namabelakang  tdk boleh kosong.

sql> insert into karyawan2
  (id,namadepan , namabelakang,gaji,telp)
    values (1003,'adi','koncara',18500000,'021-882433');
ERROR at line 1:
ORA-00001: unique constraint (CASSEP.PK_KARYAWAN_01) violated 
pikirkan error ini apa? telah melanggar role
isi data id  sudah ada yang sama harus unique

sql> insert into karyawan2
  (id,namadepan , namabelakang,gaji,telp)
    values (1005,'anita','setyorini',19500000,'021-8824346');
1 row created
sql> insert into karyawan
   (id,namadepan , namabelakang,gaji,telp)
     values ('1006','muthia','chrisye',2300000,'021-24523');
ERROR at line 1:
ORA-00942: table or view does not exist
pikirkan error ini apa? tabel yang di isi tdk ada
sql> insert into karyawan2
   (id,namadepan , namabelakang,gaji,telp)
     values ('1006','muthia','chrisye',2300000,'021-24523');
pikirkan error ini apa? telah melanggar
isi data tdk sesuai dengan type datanya kemungkinan
periksa apakah id type datanya number atau varchar2


       
=================================
isi data table rekeking bank milik karyawan

sql >insert into  rek_bank_karyawan (norekening ,id ,namabank )
values('001-516-456-09-09',1003,'Bank BNI 46');
sql >insert into  rek_bank_karyawan (norekening ,id ,namabank )
values('012-872-8373',1003,'Bank Mandiri');
sql >insert into  rek_bank_karyawan (norekening ,id ,namabank )
values('007-234-5355',1001,'Bank syariah Mandiri');
sql >insert into  rek_bank_karyawan (norekening ,id ,namabank )
values('42-09-0345-897-90',1002,'Bank BTN');

LAKUKAN PENGHAPUSAN DATA
akibat nya perhatikan perubahan kedua tabel karyawan2 dan rek_bank_karyawan
data yang memiliki id='1001' akan di hapus

SQL> delete from karyawan2 where id=1001;
1 row deleted.
SQL>  select * from rek_bank_karyAWAN;
NOREKENING                   ID NAMABANK
-------------------- ---------- ----------------------
001-516-456-09-09          1003 Bank BNI 46
012-872-8373               1003 Bank Mandiri
42-09-0345-897-90          1002 Bank BTN
SQL> select * from karyawan2;
    ID NAMADEPAN    NAMABELAKANG       GAJI TELP
---------- ------------ ------------ ---------- ----------
      1002 adrian       riyanto         2900000 021-882453
      1003 adi          koncara        18500000 021-882433
      1004 zakaria      .               2300000 021-56778
      1006 muthia       chrisye         2300000 021-24523
      1005 anita        setyorini      19500000 021-882434 
=======================================================================     
coba buat lagi tabel karyawan2 dan ker_bank_karyawan
tidak menggunakan  on delete cascade  
apa yang terjadi tolong analisa ?
lakukan penghapusan table karyawan2
SQL> drop karyawan2;
ERROR at line 1:
ORA-00950: invalid DROP option
tidak bisa sembarangan di hapus karena ada relation dengan table rek_bank_karyawan
 lakukan penghapusan tabel krek_bank_karyawan
 SQL> drop rek_bank_karyawan;
drop rek_bank_karyawan
     *
ERROR at line 1:
ORA-00950: invalid DROP option
sama tidak sembarangan table di hapus.

SQL> alter table karyawan2 disable primary key;
alter table karyawan2 disable primary key
*
ERROR at line 1:
ORA-02297: cannot disable constraint (CASSEP.PK_KARYAWAN_01) - dependencies
exist

lakukan perintah ini dulu untuk desble constraint fk_rek_karyawan
SQL>  alter table rek_bank_karyawan disable constraint fk_rek_karyawan;
Table altered.
SQL> alter table karyawan2 disable primary key;
Table altered.
SQL> alter table karyawan2 enable primary key;
SQL> alter table rek_bank_karyawan drop primary key cascade;
Table altered.
SQL> alter table karyawan2 drop primary key cascade;
Table altered.
SQL> alter table rek_bank_karyawan disable primary key;
Table altered.
SQL> alter table rek_bank_karyawan disable constraint pk_norekening;
Table altered.
baru bisa di hapus setelah tidak ada relation yang di bentuk oleh constraint
--------------------------------

Tidak ada komentar: