oracle trigger
şimal15.08.2005 - 16:56:32
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...
 
doganzorlu15.08.2005 - 19:46:34
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....


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...
 
şimal16.08.2005 - 09:14:22
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
 
şimal16.08.2005 - 11:26:41
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ş...
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com