MySQL:从函数调用存储过程
我在MySQLMySQL:从函数调用存储过程,mysql,stored-procedures,Mysql,Stored Procedures,我在MySQLString\u Split中创建了存储过程 DROP PROCEDURE IF EXISTS String_Split; DELIMITER $$ CREATE PROCEDURE String_Split(vString VARCHAR(8000),vSeparator VARCHAR(5)) BEGIN DECLARE vDone tinyint(1) DEFAULT 1; DECLARE vIndex INT DEFAULT 1; DECLARE vSubString V
String\u Split
中创建了存储过程
DROP PROCEDURE IF EXISTS String_Split;
DELIMITER $$
CREATE PROCEDURE String_Split(vString VARCHAR(8000),vSeparator VARCHAR(5))
BEGIN
DECLARE vDone tinyint(1) DEFAULT 1;
DECLARE vIndex INT DEFAULT 1;
DECLARE vSubString VARCHAR(500);
DROP TEMPORARY TABLE IF EXISTS tmpIDList;
CREATE TEMPORARY TABLE IF NOT EXISTS tmpIDList (ID varchar(500));
WHILE vDone > 0 DO
SET vSubString = SUBSTRING(vString, vIndex,
IF(LOCATE(vSeparator, vString, vIndex) > 0,
LOCATE(vSeparator, vString, vIndex) - vIndex,
LENGTH(vString)
));
IF LENGTH(vSubString) > 0 THEN
SET vIndex = vIndex + LENGTH(vSubString) + 1;
INSERT INTO tmpIDList VALUES (vSubString);
ELSE
SET vDone = 0;
END IF;
END WHILE;
END$$
DELIMITER ;
我正在从函数调用此存储过程
DROP FUNCTION IF EXISTS test;
DELIMITER $$
CREATE FUNCTION test (IDLIST VARCHAR(255))
RETURNS VARCHAR(2000)
BEGIN
DECLARE returnData VARCHAR(2000);
DROP TEMPORARY TABLE IF EXISTS TEMP1;
CREATE TEMPORARY TABLE IF NOT EXISTS TEMP1(id bigint);
CALL String_Split(IDLIST,',');
INSERT INTO TEMP1 (SELECT * FROM tmpIDList);
SELECT GROUP_CONCAT(first_name) INTO returnData
FROM user_master
WHERE id IN (SELECT id FROM TEMP1);
RETURN returnData;
End $$
DELIMITER ;
但我有以下例外
Error Code: 1146. Table 'backup25dec_latest.tmpidlist' doesn't exist
我无法重现这个问题 确实生成了两个警告(注意),但该行为记录在中
mysql>显示警告;
+-------+------+---------------------------+
|级别|代码|消息|
+-------+------+---------------------------+
|注| 1051 |未知表格“temp1”|
|注| 1051 |未知表格“tmpidlist”|
+-------+------+---------------------------+
一组2行(0.00秒)
我当时使用的是MySQL 5.0,我认为该功能可能不适用于它。我升级到了5.6,它工作正常。谢谢你的关心