From: | Antonio Sergio de Mello e Souza <asergioz(at)bol(dot)com(dot)br> |
---|---|
To: | David A Dickson <david(dot)dickson(at)mail(dot)mcgill(dot)ca> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Pl/Pgsql triger procedure calls with parameters |
Date: | 2001-11-27 14:37:20 |
Message-ID: | 3C03A520.5040206@bol.com.br |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
David A Dickson wrote:
>
>I am trying to make a call to a function that takes three text parameters
>as input from a trigger. The function is supposed to check if
>SELECT * FROM $3 WHERE new.$1 = $3.$2
>has more than 0 rows. If it does then new is returned, if not an exception
>is raised. My problem is that I get an error every time I try to declare a
>trigger that calls this function. Below is the code for the function and
>trigger I am trying to create.
>
>CREATE FUNCTION validate_field(text, text, text)
>RETURNS opaque
>
...
>
>LANGUAGE 'plpgsql';
>
>CREATE TRIGGER trigger_name
>BEFORE INSERT OR UPDATE
>ON table1
>FOR EACH ROW
>EXECUTE PROCEDURE validate_field('field1', 'field2', 'table2');
>
>CREATE
>psql:validate_field.txt:24: ERROR: parser: parse error at or near "field1"
>
>It would save me many lines of code if I could call the function from
>the trigger since I need to do it for many combinations of table1,
>field1, field2, and table2. Any ideas on how to make this work?
>
Hi,
Trigger procedures take the arguments passed at create trigger time via a different mechanism that the normal parameter passing one. You'll need to use the special variables TG_NARGS and TG_ARGV[]. See section 24.3, in the documentation.
Regards,
Antonio Sergio
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2001-11-27 15:03:58 | Re: psql timeout |
Previous Message | Roderick A. Anderson | 2001-11-27 13:28:59 | Re: Row Limit? |