From: | Doug Gorley <douggorley(at)shaw(dot)ca> |
---|---|
To: | pgsql-novice(at)postgresql(dot)org |
Cc: | KeithW(at)NarrowPathInc(dot)com |
Subject: | Re: recursive processing |
Date: | 2005-02-17 06:02:36 |
Message-ID: | 4214337C.3060503@shaw.ca |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice |
Hi Keith,
This function accomplishes what you want (at least in my testing), but
I'm no expert on PL/pgSQL programming; If anyone has any recommendations
on how to do this better, I'd live to hear it.
Thanks,
Doug Gorley | douggorley (at) shaw (dot) ca
---
---
create or replace function build_assemblies()
returns integer
as $$
declare
compound tbl_assembly%ROWTYPE;
replacement tbl_assembly%ROWTYPE;
begin
for compound in execute 'select
*
from
tbl_assembly
where
component_id in (select item_id from tbl_assembly)'
loop
for replacement in select
*
from
tbl_assembly
where
item_id = compound.component_id
loop
insert into tbl_assembly values
(
compound.item_id,
replacement.component_id,
compound.quantity * replacement.quantity
);
end loop;
delete from
tbl_assembly
where
item_id = compound.item_id
and component_id = compound.component_id;
end loop;
return 1;
end;
$$ language plpgsql;
--
--
> Hi All,
>
> I have two tables. The first table (tbl_item) contains an item id and
> it's type.
>
>tbl_item
>item_id | item_type
>--------+----------
> A | DIR
> B | DIR
> C | ASY
> D | DIR
> E | DIR
> F | DIR
> G | ASY
>
>
> The second table (tbl_assembly) contains the components of the
> assemblies. It is possible that an assembly is made up of any quantity
> of DIR items or one or more assemblies
>
>tbl_assembly
>item_id | component_id | quantity
>--------+--------------+---------
> C | A | 2
> C | B | 4
> G | C | 3
> G | E | 1
> G | F | 8
>
>
> I would like to perform some recursive processing to replace any
> assembly used as a component with the appropriate number of components
> so that all component_ids are of item_type = 'DIR'.
>
>item_id | component_id | quantity
>--------+--------------+---------
> C | A | 2
> C | B | 4
> G | A | 6
> G | B | 12
> G | E | 1
> G | F | 8
>
>
> I want to perform this processing any time an item_id is INSERTed or
> UPDATEDed into tbl_assembly (TRIGGER) and place this result back into
> the assembly table.
>
> Any assistance and URL's to documentation or examples is appreciated.
>
>--
>Kind Regards,
>Keith
>
From | Date | Subject | |
---|---|---|---|
Next Message | Ramon Orticio | 2005-02-17 07:03:57 | handling images in postgresql |
Previous Message | Keith Worthington | 2005-02-17 03:23:15 | recursive processing |