[postgresql-it] R: [pl/pgsql-Trigger] estrarre il valore di una colonna arbitraria da NEW

  • From: "Ing. Claudio Rossi" <ing.claudiorossi@xxxxxxxxx>
  • To: postgresql-it <postgresql-it@xxxxxxxxxxxxx>
  • Date: Tue, 8 Apr 2008 23:35:48 +0200

var_x := NEW.var_y;

Non si puo' fare in pl/pgsql.

In generale dubito si possa fare in qualunque linguaggio fortemente
tipizzato, quale e' il pl/pgsql.

Quello che serve a te sono le variable variables del buon php. Anche
il perl le ha che io sappia, ma non lo uso mai, quindi sono a rischio
stupidaggine.

Mi vengono in mente 3 soluzioni:

- Usi il pl/perl nel caso in cui abbia le variable variables (non ne
sono sicuro, sono proprio arrugginito sul perl).

- Usi uno layer intermedio quale puo' essere una funzione wrapper, una
tabella temporanea, ecc... come d'altronde ti han gia' suggerito.

- Usi il C. Fai una roba del genere:

Prima di tutto invece del nome della colonna prendi il numero, ma
vabeh quello e' facile se sai gia' come prendere il nome non te lo
spiego. Poi fai una funzione che fa cosi':

TriggerData *trigdata = (TriggerData *) fcinfo->context;
TupleDesc   tupdesc;
HeapTuple tuple;
...
tuple = trigdata->tg_newtuple;
tupdesc = trigdata->tg_relation->rd_att;

Poi usi:
Datum SPI_getbinval(HeapTuple row, TupleDesc rowdesc, int colnumber,
bool * isnull)
oppure
char * SPI_getvalue(HeapTuple row, TupleDesc rowdesc, int colnumber)

e ti pigli il valore.

Other related posts: