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_STRます

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

申し訳ありませんが、問題はselectintoの構文です。

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 に答える