Re: Strugging with NEW and OLD records.
| От | Richard Huxton |
|---|---|
| Тема | Re: Strugging with NEW and OLD records. |
| Дата | |
| Msg-id | 43845DF5.4020401@archonet.com обсуждение исходный текст |
| Ответ на | Strugging with NEW and OLD records. (Script Head <scripthead@gmail.com>) |
| Список | pgsql-general |
Script Head wrote:
> I am a newbie to the stored proc. game and this is eating my brain.
The error message is accurate but not useful...
>>CREATE TABLE name(first VARCHAR(32) NULL,last VARCHAR(32) NULL, extra
> VARCHAR(32) NULL );
>
>>CREATE OR REPLACE FUNCTION update_name() RETURNS opaque AS '
> DECLARE
> BEGIN
> NEW.extra:=NEW.first;
> RETURN NEW;
> END;
> ' LANGUAGE 'plpgsql';
>
>>CREATE TRIGGER update_name_extra BEFORE INSERT
> ON name
> EXECUTE PROCEDURE update_name();
The CREATE TRIGGER is the problem...
>>INSERT INTO name(first,last) VALUES('script','head');
>
> ERROR: record "new" is not assigned yet
> DETAIL: The tuple structure of a not-yet-assigned record is indeterminate.
> CONTEXT: PL/pgSQL function "update_name" line 4 at assignment
You need to add "FOR EACH ROW" before "EXECUTE PROCEDURE" otherwise you
have a statement-level trigger which doesn't give you access to NEW/OLD.
HTH
--
Richard Huxton
Archonet Ltd
В списке pgsql-general по дате отправления: