Re: Trigger Procedure Hakkı

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
Thread:
Lists: pgsql-tr-genel

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.

In response to

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Devrim GUNDUZ 2006-04-13 08:13:53 İş ilanı
Previous Message Ahmet ERDOGAN 2006-04-07 14:16:31 Trigger Procedure Hakkında