oracle trigger

Oracle veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
şimal
Kıdemli Üye
Mesajlar: 516
Kayıt: 10 Kas 2003 09:36
Konum: ANKARA

oracle trigger

Mesaj gönderen şimal » 15 Ağu 2005 03:56

merhaba

country_code_2digit adinda bir tablom var
I_NAME, TYPE iki kolonum var
I_NAME e ülke isimleri
BULGARIA(GSM)
ROMANIA(PSTN) şeklinde giriliyor
TYPE kısmında ise GSM yada PSTN bilgisi bulunması gerekiyor.

I_NAME kolonuna BULGARIA(GSM) girilince TYPE kısmını otomatik GSM
BULGARIA(PSTN) girilince TYPE kısmını otomatik PSTN
verisi girecek bir trigger yazmak istiyorum. Bunun için

create or replace trigger cc2digit_bir
before insert or update on country_code_2digit
referencing old as old new as new
begin
if :new.i_name like '%(PSTN)' then :new.type := 'PSTN';
else if :new.i_name like '%(GSM)' then :new.type := 'GSM';
end if;
end;

şeklinde yazdim ancak bunu TOAD da create edemiyorum çünkü
:new için variables penceresini açıyor. benden bir değişken girmemi bekliyor.

Bu olayi nasil çözebilirim. Triggeri nasil create edebilirim?
Triggerim hataliysa nasil düzeltebilirim?
kolay gelsin iyi günler...
Boş Başak Dik Durur...
Santranç bitince şah da piyon da aynı torbaya girermiş...

doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 08:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu » 15 Ağu 2005 06:46

Selam

TOAD da iki mod vardır. Birisi script (F5) birisi de grid (Shift-F9).. F5 e basacaksınız.. Ayrıca aşağıdaki gibi bir kod yazarsanız yeni iletişim altyapıları geldiğinde kodu değiştirmeniz gerekmez. Aslında veritabanı tasarımı açısından şebeke diye bir tabloda da bununmasında yarar var aslında bu kodun ve bir goreign key ile bağlanmalı. Ama uğraşamam derseniz bilemem....

Kod: Tümünü seç

CREATE OR REPLACE TRIGGER cc2digit_bir
   BEFORE INSERT OR UPDATE
   ON country_code_2digit
   REFERENCING OLD AS OLD NEW AS NEW
DECLARE
   nwidth   NUMBER;
BEGIN
   nwidth := INSTR (:NEW.i_name, ')') - INSTR (:NEW.i_name, '(') - 1;

   IF NVL (nwidth, 0) > 0
   THEN
      :NEW.TYPE := SUBSTR (:NEW.i_name, INSTR (:NEW.i_name, '(') + 1, nwidth);
   END IF;
END;
işinizi görecektir.

Kolay gelsin...
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)

Kullanıcı avatarı
şimal
Kıdemli Üye
Mesajlar: 516
Kayıt: 10 Kas 2003 09:36
Konum: ANKARA

Mesaj gönderen şimal » 16 Ağu 2005 08:14

hata veriyor :(

Error on line 0
create or replace trigger cc2digit_bir
before insert or update on country_code_

ORA-04082: NEW or OLD references not allowed in table level triggers
Boş Başak Dik Durur...
Santranç bitince şah da piyon da aynı torbaya girermiş...

Kullanıcı avatarı
şimal
Kıdemli Üye
Mesajlar: 516
Kayıt: 10 Kas 2003 09:36
Konum: ANKARA

Mesaj gönderen şimal » 16 Ağu 2005 10:26

CREATE OR REPLACE TRIGGER cc2digit_bir
BEFORE INSERT OR UPDATE
ON country_code_2digit
REFERENCING OLD AS OLD NEW AS NEW
for each row
DECLARE
nwidth NUMBER;
BEGIN
nwidth := INSTR (:NEW.i_name, ')') - INSTR (:NEW.i_name, '(') - 1;

IF NVL (nwidth, 0) > 0
THEN
:NEW.TYPE := SUBSTR (:NEW.i_name, INSTR (:NEW.i_name, '(') + 1, nwidth);
END IF;
END;


for each row satırı eklenmeliymiş...
Boş Başak Dik Durur...
Santranç bitince şah da piyon da aynı torbaya girermiş...

Cevapla