From: | "Ken Winter" <ken(at)sunward(dot)org> |
---|---|
To: | "PostgreSQL pg-sql list" <pgsql-sql(at)postgresql(dot)org> |
Subject: | |
Date: | 2005-11-24 04:23:05 |
Message-ID: | 004e01c5f0ae$c4d4bfe0$6503a8c0@kenxp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
In PL/pgSQL, is there a way to put a *variable* column-name in a dot
notation reference to a RECORD column?
For example, suppose I want to write a function like the following, which is
to be called by a "BEFORE INSERT" trigger:
CREATE OR REPLACE FUNCTION foo ( ) RETURNS TRIGGER AS
'
DECLARE
var VARCHAR;
BEGIN
var := TG_ARGV[0]
NEW.<the column whose name is the value of var> := ''whatever'';
RETURN NEW;
END;
'
LANGUAGE 'plpgsql'
;
The aim of this uninteresting function is to assign the value 'whatever' to
the table column that is passed in by the calling trigger as TG_ARGV[0],
i.e. the first calling argument.
What I don't know is what to put into the dot notation in place of ".<the
column whose name is the value of var>" so that the column of NEW that is
addressed by the assignment statement is the one passed in as the first
argument. Is there any PL/pgSQL construct that could be substituted in here
to achieve this result?
If not, can anybody suggest a way to write a trigger-called function that
would accomplish the same result?
In case it's not obvious, the underlying goal is to write a single
trigger-called function that could modify different columns for each trigger
that called it, where each trigger specified the target column by a calling
argument (or by any other viable mechanism).
~ TIA
~ Ken
From | Date | Subject | |
---|---|---|---|
Next Message | Leif B. Kristensen | 2005-11-24 11:16:00 | Index wonder |
Previous Message | Michael Fuhr | 2005-11-23 18:09:58 | Re: what is going on in the PostgreSQL |