Thread: PL/pgSQL Question

PL/pgSQL Question

From
"Mitch Vincent"
Date:
I haven't used PL/pgSQL very much but it looks like a good language in which
to make some simple functions for this application I'm writing..

Is it possible (with PL/pgSQL) to access other records in other tables than
the tuple that pulled the trigger (and called the function)?

Say this (pseudo code):

When a record is added to the invoice_payments table have a trigger fire and
call this function :

total_invoice()

exec_sql -> UPDATE invoices SET total = total + <amount in amount_field in
the tuple> WHERE invoice_id=<value in the invoice ID of this tuple>



That's basically all I'd have to do.. There are a lot of these things that
could be handled by the backend and would make my life much easier..

I looked in the documentation but the examples only talk about rearranging
values within the tuple that fired the trigger which called the function
(wow, a mouth full).

Thanks!

-Mitch



Re: PL/pgSQL Question

From
"Mitch Vincent"
Date:
Er, I'm pretty sure I found what I was looking for, sorry to waste
everyone's time.. I looked right past half the documentation!

-Mitch

----- Original Message -----
From: "Mitch Vincent" <mitch@venux.net>
To: <pgsql-general@postgresql.org>
Sent: Monday, January 22, 2001 6:56 PM
Subject: PL/pgSQL Question


> I haven't used PL/pgSQL very much but it looks like a good language in
which
> to make some simple functions for this application I'm writing..
>
> Is it possible (with PL/pgSQL) to access other records in other tables
than
> the tuple that pulled the trigger (and called the function)?
>
> Say this (pseudo code):
>
> When a record is added to the invoice_payments table have a trigger fire
and
> call this function :
>
> total_invoice()
>
> exec_sql -> UPDATE invoices SET total = total + <amount in amount_field in
> the tuple> WHERE invoice_id=<value in the invoice ID of this tuple>
>
>
>
> That's basically all I'd have to do.. There are a lot of these things that
> could be handled by the backend and would make my life much easier..
>
> I looked in the documentation but the examples only talk about rearranging
> values within the tuple that fired the trigger which called the function
> (wow, a mouth full).
>
> Thanks!
>
> -Mitch
>
>
>


Re: PL/pgSQL Question

From
Emmanuel Charpentier
Date:
Mitch Vincent wrote:
>
> I haven't used PL/pgSQL very much but it looks like a good language in which
> to make some simple functions for this application I'm writing..
>
> Is it possible (with PL/pgSQL) to access other records in other tables than
> the tuple that pulled the trigger (and called the function)?
>
> Say this (pseudo code):
>
> When a record is added to the invoice_payments table have a trigger fire and
> call this function :
>
> total_invoice()
>
> exec_sql -> UPDATE invoices SET total = total + <amount in amount_field in
> the tuple> WHERE invoice_id=<value in the invoice ID of this tuple>
>
> That's basically all I'd have to do.. There are a lot of these things that
> could be handled by the backend and would make my life much easier..

Much simpler (but I might be misunderstanding what you're aiming at ...)

CREATE VIEW invoices as (SELECT invoice_id, SUM(amount) group by
invoice_id FROM invoice_payments) as t1 join (<whatever you need from
other tables>) as t2 on t1.invoice_id=t2.invoice_id;

That way, you don't have to worry about maintaining consistency between
invoice_payments and invoices. Which is all the point of having a
Codd-conformant RDBMS ! No hassles with updates and/or deletions in
invoice_payments ...

                    Emmanuel Charpentier

--
Emmanuel Charpentier