CREATE TRIGGER changeinsert BEFORE INSERT ON cdr
FOR EACH ROW
BEGIN
        IF NEW.dstchannel != ''  THEN
             IF ((not exists(select id from asterisk.devices where concat(id)=NEW.dst))  and (not exists(select id from asterisk.users where extension=NEW.dst))) THEN
                  SET NEW.servicenum = 'out';
             ELSE
                  SET NEW.servicenum = 'in';
             END IF;      
        END IF;
END
执行之后:
MySQL 返回: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6 有谁知道我哪出语法错误了?servicenum字段 是varchar(30)类型

解决方案 »

  1.   

    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

  2.   

    也就是说如果我想在自己的机器上调试,只能自己猜着建一个表cdr表了?同样需要你的 devices , users 表,某则只能靠眼睛看业判断你的故障了。| cdr   | CREATE TABLE `cdr` (
      `calldate` datetime NOT NULL default '0000-00-00 00:00:00',
      `clid` varchar(80) NOT NULL default '',
      `src` varchar(80) NOT NULL default '',
      `dst` varchar(80) NOT NULL default '',
      `dcontext` varchar(80) NOT NULL default '',
      `channel` varchar(80) NOT NULL default '',
      `dstchannel` varchar(80) NOT NULL default '',
      `lastapp` varchar(80) NOT NULL default '',
      `lastdata` varchar(80) NOT NULL default '',
      `duration` int(11) NOT NULL default '0',
      `billsec` int(11) NOT NULL default '0',
      `disposition` varchar(45) NOT NULL default '',
      `amaflags` int(11) NOT NULL default '0',
      `accountcode` varchar(20) NOT NULL default '',
      `uniqueid` varchar(32) NOT NULL default '',
      `userfield` varchar(255) NOT NULL default ''
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
      

  3.   

    主要是mysql下不支持"((not exists(select id from asterisk.devices where concat(id)=NEW.dst)) and (not exists(select id from asterisk.users where extension=NEW.dst))) "这样exists的写法
    你更改下,改用通过中间变量方式进行判断