Lists: | Postg윈 토토SQL : |
---|
From: | "Ahmet" <corsairsoft(at)gmail(dot)com> |
---|---|
To: | "PostgreSQL" <pgsql-tr-genel(at)postgresql(dot)org> |
Subject: | Trigger Procedure Hakkında |
Date: | 2006-04-07 08:53:46 |
Message-ID: | 001201c65a20$c9c6cc6000000a@asus |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-tr-genel |
Merhabalar,
MySQL' 5 te aşağıdaki şekilde kullandığım trigger' ı PostgreSQL de yazmaya çalışıyorum
hata vermiyor ama sonuçta vermiyor, aceba nerde hata yapıyorum ?
tablom
ID BIRIM ADET TOPLAM
----- ----------- ----------- -------------------
1 10 2 20
2 50 3 150
-- MySQL deki trigger
CREATE TRIGGER `hesapla` BEFORE UPDATE ON `tablom`
FOR EACH ROW
BEGIN
SET new.toplam = new.birim * new.adet;
END;
--PostgreSQL deki trigger
CREATE OR REPLACE FUNCTION "public"."fonksiyonum" () RETURNS trigger AS
$fonksiyonum$
BEGIN
new.toplam = new.birim * new.adet;
RETURN NULL; // RETURN NEW; < bunuda denedim
END;
$fonksiyonum$
LANGUAGE 'plpgsql';
CREATE TRIGGER "hesapla" AFTER UPDATE // BEFORE UPDATE denedim
ON "public"."tablom" FOR EACH ROW
EXECUTE PROCEDURE "public"."fonksiyonum"();
From: | Volkan YAZICI <yazicivo(at)ttnet(dot)net(dot)tr> |
---|---|
To: | Ahmet <corsairsoft(at)gmail(dot)com> |
Cc: | pgsql-tr-genel(at)postgresql(dot)org |
Subject: | Re: Trigger Procedure Hakkı |
Date: | 2006-04-07 18:59:51 |
Message-ID: | 20060407185951.GA222@alamut |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | Postg윈 토토SQL : |
On Apr 07 11:53, Ahmet wrote:
> CREATE OR REPLACE FUNCTION "public"."fonksiyonum" () RETURNS trigger AS
> $fonksiyonum$
> BEGIN
>
> new.toplam = new.birim * new.adet;
Şöyle örnek bir kod parçası vereyim, hatanızı oradan seçin:
BEGIN;
CREATE TABLE trig_t (toplam integer, birim integer, adet integer);
CREATE FUNCTION trig_f() RETURNS trigger AS $$
BEGIN
NEW.toplam := NEW.birim * NEW.adet;
RETURN NEW;
END;
$$ LANGUAGE plpgsql STRICT VOLATILE;
CREATE TRIGGER trig_t_f
BEFORE UPDATE ON trig_t
FOR EACH ROW
EXECUTE PROCEDURE trig_f();
COPY trig_t FROM stdin;
100 10 1
200 20 2
300 30 3
400 40 4
500 50 5
\.
SELECT toplam, birim, adet FROM trig_t;
UPDATE trig_t SET birim = birim WHERE adet % 2 = 0;
SELECT toplam, birim, adet FROM trig_t;
ROLLBACK
> RETURN NULL; // RETURN NEW; < bunuda denedim
Yukarıdaki satır oldukça yanlış olmakla birlikte, bu şekilde
deneme-yanılma yöntemine başvurmaktansa PostgreSQL dökümantasyonunda
PL/pgSQL prosedürel dilinde trigger'ların nasıl oluşturulacağını
içeren bölüme bakmanız sizi cevaba daha çabuk götürebilir. (Özellikle
BEFORE ve AFTER trigger'larda NULL değer döndürmek ile ilgili kısma
bakınız.)
> CREATE TRIGGER "hesapla" AFTER UPDATE // BEFORE UPDATE denedim
Yukarıdaki paragraf burası için de geçerli. (Hatta bu kodu görünce "Acaba
BEFORE ve AFTER trigger arasındaki farkı gerçekten biliyor mu?" sorusu
aklımdan geçmedi değil.)
İyi çalışmalar.