Re: postgresql de recursive

From: "N(dot) Can KIRIK" <can(at)epati(dot)com(dot)tr>
To: Ali Çelik <ali(at)alicelik(dot)com(dot)tr>
Cc: pgsql-tr-genel <pgsql-tr-genel(at)postgresql(dot)org>
Subject: Re: postgresql de recursive
Date: 2012-01-02 12:23:10
Message-ID: CAJ1wP5kbF0=V-eCobU+d05fSzsNAq-y5u3HMCbo=xNd5LBSfew@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

selam,

yanılmıyorsma, CTE sorgusunu bir view olarak kaydedersen fonksiyon içinde
rahat bir şekilde kullanabilirsin.

2012/1/2 Ali Çelik <ali(at)alicelik(dot)com(dot)tr>

> Merhaba RECURSIVE i fonksiyon içinde kullanmaya çalıştım fakat FOR
> ifadesi ile beraber kullanamıyorum. Yardımcı olabilecek var mı acaba
>
> ///////////////////////////////////////tablo
> CREATE TABLE public.persons (
> id INTEGER,
> name TEXT,
> master_id INTEGER,
> commission_percent NUMERIC(15,2) DEFAULT 10 NOT NULL,
> CONSTRAINT persons_id_master_id_key UNIQUE(id, master_id)
> ) WITHOUT OIDS;
> //////////////////////////
>
>
> ////////////////////////////////////////////////////////////// çalışan
> fonksiyon //////////////////////////////////////////////////////////////
> CREATE OR REPLACE FUNCTION public.function1 (
> )
> RETURNS TABLE (
> nnode integer,
> ppath integer []
> ) AS
> $body$
> DECLARE
> _table1 record;
> BEGIN
> WITH RECURSIVE rtable(node, path) AS (
> SELECT id, ARRAY[id] FROM persons WHERE master_id IS NULL
> UNION ALL
> SELECT p1.id, rtable.path || ARRAY[p1.id] FROM persons p1 JOIN rtable ON
> (p1.master_id = rtable.node)
> WHERE id != any (rtable.path)
> )
> SELECT * into _table1 FROM rtable ORDER BY path;
> nnode:=_table1.node;ppath:=_table1.path;
> RETURN NEXT ;
> END;
> //////////////////////////////////////////////////////////// sadece 1
> kayıt döndürdüğü için uygun değil
> ///////////////////////////////////////////////////////////////
>
>
>
> ////////////////////////////////////////////////////////////// hata veren
> fonksiyon //////////////////////////////////////////////////////////////
> CREATE OR REPLACE FUNCTION public.function1 (
> )
> RETURNS TABLE (
> nnode integer,
> ppath integer []
> ) AS
> $body$
> DECLARE
> _table1 record;
> BEGIN
> WITH RECURSIVE rtable(node, path) AS (
> SELECT id, ARRAY[id] FROM persons WHERE master_id IS NULL
> UNION ALL
> SELECT p1.id, rtable.path || ARRAY[p1.id] FROM persons p1 JOIN rtable ON
> (p1.master_id = rtable.node)
> WHERE id != any (rtable.path)
> )
>
>
> FOR _table1 IN (SELECT * into _table1 FROM rtable ORDER BY path) LOOP
>
> nnode:=_table1.node;ppath:=_table1.path;
>
> RETURN NEXT ;
> END LOOP;
> END;
>
> //////////////////////////////////////////////////////// for kullanmama
> izin vermiyor
> ///////////////////////////////////////////////////////////////////
>
>
> Ali ÇELİK
>
>

In response to

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Ali Çelik 2012-01-08 13:59:28 postgresql data types
Previous Message Ali Çelik 2012-01-02 09:36:29 postgresql de recursive