On Tue, 2003-08-26 at 07:28, Jules Alberts wrote:
> Hello everyone,
> 
> I'm working on a tiny trigger function that needs to ensure that all 
> values entered in a field are lowercase'd. I can't use pl/pgsql because 
> I have a dozen different columns (with different names) that need a 
> trigger that does this and pl'pgsql can't expand variable names to 
> fieldnames. Writing a dozen functions (one per columnname) is /way/ too 
> blunt so I tried pl/tcl (which I don't know):
> 
> ----------------------------------------------------------------
> -- first do:
> --   createdb test
> --   createlang pltcl test
> 
> drop function my_lowercase() cascade;
> create function my_lowercase() returns trigger as '
>   set NEW($1) lower(NEW($1))
>   return [array get NEW]' language 'pltcl';
> 
> drop table mytab;
> create table mytab (myfield varchar);
> 
> create trigger trig_mytab before insert or update on mytab
>   for each row execute procedure my_lowercase('myfield');
> 
> -- let's insert a string, hope it's lowercase'd
> insert into mytab (myfield) values ('TEST');
> select * from mytab;
> 
> -- wrong, myfield contains 'lower(NEW(myfield))'
> ----------------------------------------------------------------
> 
> Can someone please tell me what I'm doing wrong? It's probably 
> something very simple but I don't know TCL (and I'm planning to keep 
> the serverside programming on pl'pgsql as much as possible).
> 

You'll need a function a bit more complex than this, but to do what your
trying to do in the function above the function would be written as:

create or replace function my_lowercase() returns trigger as '
  set NEW($1) [string tolower $NEW($1)] 
  return [array get NEW]' language 'pltcl';

Hope this helps, please post the final results when you get there. 

Robert Treat
-- 
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL


---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to