Thread: Trigger to force fields to lowercase at insert/update
Suppose I have a bunch of fields in different tables which I'd like to always force to lowercase (since they represent case-insensitive data). Suppose I want to do it at SQL level, not application level. If the user say "INSERT INTO foo VALUES ('Abc')", I want to really insert 'abc'. Is there an elegant way of doing this? Some kind of trigger, maybe? I have no experience with triggers or pl/sql, but I couldn't come up with a solution general enough to be reused in multiple places. Or is the premise a bad idea? -- Leonardo Boiko http://namakajiri.net
Attachment
Leonardo Boiko <leoboiko@gmail.com> schrieb: > Suppose I have a bunch of fields in different tables which I'd like to > always force to lowercase (since they represent case-insensitive data). > Suppose I want to do it at SQL level, not application level. If the > user say "INSERT INTO foo VALUES ('Abc')", I want to really insert insert into foo values (lower('Abc')); ? > 'abc'. Is there an elegant way of doing this? Some kind of trigger, > maybe? I have no experience with triggers or pl/sql, but I couldn't test=# create table foo (x text); CREATE TABLE test=# create function foo_lower() returns trigger as $$begin NEW.x := lower(NEW.x); return NEW; end;$$ language plpgsql; CREATE FUNCTION test=# create trigger t_foo before insert or update on foo for each row execute procedure foo_lower(); CREATE TRIGGER test=# insert into foo (x) values ('AbC'); INSERT 0 1 test=# select * from foo; x ----- abc (1 row) HTH, Andreas -- Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect. (Linus Torvalds) "If I was god, I would recompile penguin with --enable-fly." (unknow) Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°
On Wed, Apr 26, 2006 at 12:52:55 -0700, Leonardo Boiko <leoboiko@gmail.com> wrote: > Suppose I have a bunch of fields in different tables which I'd like to > always force to lowercase (since they represent case-insensitive data). > Suppose I want to do it at SQL level, not application level. If the > user say "INSERT INTO foo VALUES ('Abc')", I want to really insert > 'abc'. Is there an elegant way of doing this? Some kind of trigger, > maybe? I have no experience with triggers or pl/sql, but I couldn't > come up with a solution general enough to be reused in multiple places. > Or is the premise a bad idea? You can use a before trigger to change the value of the column when it is inserted or updated.