0

我的数据库中有一个名为 SPLIT_STRING 的 mysql 用户定义函数

CREATE FUNCTION `SPLIT_STR`(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
) RETURNS varchar(255) CHARSET latin1
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '')

根据位置拆分值,我正在使用触发器来更新状态,我需要一个临时变量来借助函数SPLIT_STRas来存储数据

delimiter //
CREATE TRIGGER `after_tbl1_insert` AFTER INSERT ON `tbl1`
 FOR EACH ROW BEGIN
DECLARE cab_meter_new VARCHAR(10);
DECLARE cab_cost_new VARCHAR(10);

SET @cab_meter_new = SPLIT_STR(NEW.gps_rs232, '|', 1); 
select SPLIT_STR(NEW.gps_rs232, '|', 1) INTO @cab_meter_new,SPLIT_STR(NEW.gps_rs232, '|', 2) INTO @cab_meter_old; //Throws error
----
---
--
END //
delimiter ;

如果我在触发器中调用一个函数,它会抛出一个错误

#1327 - Undeclared variable: SPLIT_STR

这是调用函数设置变量的正确方法吗,我们可以在触发器中调用函数吗,我使用的是Mysql 5.1.66版本

4

2 回答 2

2

抱歉,问题是 select into 的语法

select SPLIT_STR(NEW.gps_rs232, '|', 1) INTO @cab_meter_new,SPLIT_STR(NEW.gps_rs232, '|', 2) INTO @cab_meter_old; // Incorrect - and shows SPLIT_STR is not defined(Thinks as variable)

select SPLIT_STR(NEW.gps_rs232, '|', 1),SPLIT_STR(NEW.gps_rs232, '|', 2)  INTO @cab_meter_new, @cab_meter_old; //Correct syntax to store multiple
于 2013-01-19T07:14:02.433 回答
0

试试这个::

SET @cab_meter_new := SPLIT_STR(NEW.gps_rs232, '|', 1); //Throwing error here

或者你可以::

Select SPLIT_STR(NEW.gps_rs232, '|', 1) INTO @cab_meter_new;
于 2013-01-18T12:33:34.553 回答