On Thu, May 15, 2008 at 2:30 AM, rustam ershtukaev <[EMAIL PROTECTED]> wrote: > I have been trying to write a trigger in mysql, but can't get it to > work. It's really simple,i just need my trigger to add varchar value to > a table on insert if postcode = 1000. > > this is how i did it: > > delimiter | > drop trigger testdep| > create trigger testdep > before insert on departements > for each row > begin > declare v_postcode INTEGER; > declare v_place VARCHAR; > > select departement_postcode > into v_postcode > from departement > where departement_postcode = 1000; > > IF v_postcode = 1000 then > update departementen set departement_place = 'New York' > where departement_postcode = 1000; > END IF; > > END| > > but when i insert a new row i don't get my v_place value set > so if there someone who has time to help me with this i would greatly > appreciate this :) >
If I had to make a guess it is because you are using before insert, and there are no other rows that match: > select departement_postcode > into v_postcode > from departement > where departement_postcode = 1000; so the if statement fails. Example: ***** Using after********* mysql> drop table if exists t1,t2; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE `t1` ( -> `col1` int, -> `col2` varchar(20) -> ) ; Query OK, 0 rows affected (0.03 sec) mysql> mysql> CREATE TABLE `t2` ( -> `col1` int, -> `col2` varchar(20) -> ); Query OK, 0 rows affected (0.03 sec) mysql> mysql> delimiter | mysql> drop trigger if exists testdep| Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> create trigger testdep -> after insert on t1 -> for each row -> begin -> declare v_col1 INTEGER; -> -> select col1 -> into v_col1 -> from t1 -> where col1 = 5; -> -> IF v_col1 = 5 then -> update t2 set col2 = 'delta'; -> END IF; -> -> END| Query OK, 0 rows affected (0.01 sec) mysql> delimiter ; mysql> mysql> insert into t1 values(0,'alpha'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> mysql> insert into t2 values(5,'bravo'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into t1 values(5,'charlie'); Query OK, 1 row affected (0.00 sec) mysql> mysql> select * from t2; +------+-------+ | col1 | col2 | +------+-------+ | 5 | delta | +------+-------+ 1 row in set (0.00 sec) ***** On the other hand before********* mysql> drop table if exists t1,t2; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE `t1` ( -> `col1` int, -> `col2` varchar(20) -> ) ; Query OK, 0 rows affected (0.03 sec) mysql> mysql> CREATE TABLE `t2` ( -> `col1` int, -> `col2` varchar(20) -> ); Query OK, 0 rows affected (0.05 sec) mysql> mysql> delimiter | mysql> drop trigger if exists testdep| Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> create trigger testdep -> before insert on t1 -> for each row -> begin -> declare v_col1 INTEGER; -> -> select col1 -> into v_col1 -> from t1 -> where col1 = 5; -> -> IF v_col1 = 5 then -> update t2 set col2 = 'delta'; -> END IF; -> -> END| Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> mysql> insert into t1 values(0,'alpha'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> mysql> insert into t2 values(5,'bravo'); Query OK, 1 row affected (0.00 sec) mysql> mysql> insert into t1 values(5,'charlie'); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> mysql> select * from t2; +------+-------+ | col1 | col2 | +------+-------+ | 5 | bravo | +------+-------+ 1 row in set (0.00 sec) I suggest you provide a complete example (ddl and dml, and btw is a trigger definition ddl or dml?) if you need more assistance. -- Rob Wultsch [EMAIL PROTECTED] wultsch (aim) -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]