Thank's Pak Benyamin, atas solusinya, saya sudah berhasil create, tapi
dari trigger yang anda contohkan saya ada perbedaan dimana dalam IF
saya tidak memakai to_number karena ada kesalahan pembacaan logic
karena jika dlm number maka bulan februari 2004 dianggap > dari bulan
jan 2005 dst, maka saya gunakan to_date sehingga saat if condition
bulan feb 2004 adalah < dari jan 2005, karena saat perbandingan tetap
dianggap sebagai tanggal.


Thank's


Regard's


OKA

On 7/4/05, Johanes Benyamin <[EMAIL PROTECTED]> wrote:
> Halo,
> 
>   Saya mencoba membantu menjawab persoalan anda,
> 
> 1. Misalkan table invoice dibuat berdasarkan script berikut :
> Sintaks :
> create table invoice_data_trx
> (
>  no_invoice varchar2(100),
>  tanggal_invoice date
> )
> 
> 2. Trigger untuk proses insert,update,delete ke table invoice_data_trx
> Sintaks :
> CREATE OR REPLACE TRIGGER INVOICE_DATA_TRX_T BEFORE INSERT OR UPDATE
> OR DELETE ON INVOICE_DATA_TRX FOR EACH ROW
> DECLARE
> v_bulan_invoice_old number:=to_number(to_char(:OLD.TANGGAL_INVOICE,'mm'));
> v_tahun_invoice_old number:=to_number(to_char(:OLD.TANGGAL_INVOICE,'rrrr'));
> v_bulan_invoice_new number:=to_number(to_char(:NEW.TANGGAL_INVOICE,'mm'));
> v_tahun_invoice_new number:=to_number(to_char(:NEW.TANGGAL_INVOICE,'rrrr'));
> v_bulan_sysdate number:=to_number(to_char(SYSDATE,'mm'));
> v_tahun_sysdate number:=to_number(to_char(SYSDATE,'rrrr'));
> BEGIN
> 
> IF (to_number(to_char(:OLD.TANGGAL_INVOICE,'rrrrmmdd')) <
> to_number(to_char(SYSDATE,'rrrrmm')||'06') ) then
> IF to_number(v_tahun_invoice_old||v_bulan_invoice_old) <
> to_number(v_tahun_sysdate||(v_bulan_sysdate-1)) then
> /*pesan error dapat dimodifikasi sesuai kebutuhan */
> RAISE_APPLICATION_ERROR(-20001,'Cannot insert, update or delete to
> table invoice_data_trx because your data is incorrect .');
> END IF;
> END IF;
> 
> IF (to_number(to_char(:NEW.TANGGAL_INVOICE,'rrrrmmdd')) <
> to_number(to_char(SYSDATE,'rrrrmm')||'06') ) then
> IF to_number(v_tahun_invoice_new||v_bulan_invoice_new) <
> to_number(v_tahun_sysdate||(v_bulan_sysdate-1)) then
> /*pesan error dapat dimodifikasi sesuai kebutuhan */
> RAISE_APPLICATION_ERROR( -20001,'Cannot insert, update or delete to
> table invoice_data_trx because your data is incorrect .');
> END IF;
> END IF;
> END;
> 
> Contoh Kasus :
> 
> Asumsi sysdate adalah tanggal 4 Juli
> 
> Isi Data Invoice_Data_TRX adalah :
> --------------------------------------------
> | No_Invoice | Tanggal_Invoice |
> --------------------------------------------
> | 11               | 8/5/2005          |
> --------------------------------------------
> | 12               | 5/5/2001          |
> --------------------------------------------
> 
> 1. Proses insert untuk bulan mei 2005 ke bawah, termasuk data2 tahun
> 2000,2001, 2002,2003,2004, akan gagal dengan mengeluarkan pesan
> sebagai berikut :
> 
> Sintaks :
> INSERT INTO INVOICE_DATA_TRX (NO_INVOICE, TANGGAL_INVOICE)
> VALUES ('1','05-JULY-2000');
> 
> Error :
> ORA-20001: Cannot insert, update or delete to table invoice_data_trx
> because your data is incorrect .)*
> ORA-06512: at "INVOICE_DATA_TRX_T", line 17
> ORA-04088: error during execution of trigger 'INVOICE_DATA_TRX_T
> 
> 2. Proses delete INVOICE_DATA_TRX untuk bulan mei 2005 ke bawah,
> termasuk data2 tahun 2000,2001, 2002,2003,2004, akan gagal dengan
> mengeluarkan pesan sebagai berikut :
> 
> Sintaks :
> delete INVOICE_DATA_TRX where NO_INVOICE=12;
> 
> Error :
> ORA-20001: Cannot insert, update or delete to table invoice_data_trx
> because your data is incorrect .)*
> ORA-06512: at "INVOICE_DATA_TRX_T", line 17
> ORA-04088: error during execution of trigger 'INVOICE_DATA_TRX_T
> 
> 3. Proses update untuk data-data dimana tanggal invoice-nya, bulan mei
> 2005 ke bawah , termasuk data2 tahun 2000,2001, 2002,2003,2004
> 
> Sintaks :
> Update INVOICE_DATA_TRX
> set TANGGAL_INVOICE='05-AUG-2000'
> where NO_INVOICE=11;
> 
> Error :
> ORA-20001: Cannot insert, update or delete to table invoice_data_trx
> because your data is incorrect .)*
> ORA-06512: at "INVOICE_DATA_TRX_T", line 17
> ORA-04088: error during execution of trigger 'INVOICE_DATA_TRX_T
> 
> Note :
> )*ORA-20001: Cannot insert, update or delete to table invoice_data_trx
> because your data is incorrect .<-- pesan ini didapat dapat
> dimodifikasi berdasarkan remark trigger diatas
> 
> Semoga bisa membantu,
> 
> 
> On 7/4/05, Kang Oyib <[EMAIL PROTECTED]> wrote:
> > dear's all,
> >
> > Saya punya problem dlm membuat trigger database, saya ingin agar user
> > tidak dapat insert, update dan delete data setelah melewati tanggal 5
> > untuk bulan sebelumnya. misal, setelah tanggal 5 juli maka user tidak
> > dapat Insert, Update atau delete transaksi bulan juni, mei dst.
> >
> > Terimakasi atas solusinya....
> >
> > regard's
> >
> >
> > K.O
> 
> 
> --
> -----------I.N.D.O - O.R.A.C.L.E---------------
> Keluar: [EMAIL PROTECTED]
> Website: http://indo-oracle.blogspot.com
> -----------------------------------------------
> 
> Bergabung dengan Indonesia Thin Client User Groups,
> Terminal Server, Citrix, New Moon Caneveral, di:
> http://indo-thin.vze.com
> Yahoo! Groups Links
> 
> 
> 
> 
> 
> 
>


--
-----------I.N.D.O - O.R.A.C.L.E---------------
Keluar: [EMAIL PROTECTED]
Website: http://indo-oracle.blogspot.com
-----------------------------------------------

Bergabung dengan Indonesia Thin Client User Groups, 
Terminal Server, Citrix, New Moon Caneveral, di:
http://indo-thin.vze.com 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/indo-oracle/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Kirim email ke