2016-08-03 75 views
0

我有以下功能:如何使用連接到MySQL功能

DELIMITER $$ 
DROP FUNCTION IF EXISTS `vmtest`.`hello2`$$ 
CREATE DEFINER = `root`@`localhost` FUNCTION `vmtest`.`hello2` (s CHAR(20)) 
RETURNS TEXT 
BEGIN 
    DECLARE RETURNID INTEGER; 
    DECLARE RETURNNAME TEXT; 
    DECLARE PARENTID INTEGER; 
    DECLARE RTN TEXT; 
    DECLARE RTNNAME TEXT; 
    SET RTN = ""; 
    SET PARENTID = s; 

    WHILE PARENTID > 0 DO 
     SELECT 
     t1.category_parent_id INTO RETURNID, 
     t2.category_name INTO RETURNNAME 
    FROM e255g_virtuemart_category_categories AS t1 
     INNER JOIN e255g_virtuemart_categories_de_de AS t2 on t1.id = t2.virtuemart_category_id 
     WHERE t1.id = PARENTID; 
     IF RETURNID >0 THEN 
      IF RTN ="" THEN 
       SET RTN = RETURNID; 
      ELSE 
       SET RTN = CONCAT(RTN, ',', RETURNID); 
       SET RETURNNAME = CONCAT(RTNNAME, ',', RETURNNAME); 
      END IF; 
     END IF; 
     SET PARENTID = RETURNID;    
    END WHILE; 
    RETURN RETURNNAME; 
END$$ 

DELIMITER ; 

我想使用連接查詢到的功能,但它給了我如下錯誤:

Error in query (1327): Undeclared variable: t2 

請幫助

+0

是否查詢工作不別名? – FallAndLearn

+0

不,簡單的查詢工作..連接查詢不起作用 –

回答

1

它對多個變量INTO有點敏感。這隻會是:

DELIMITER $$ 
DROP FUNCTION IF EXISTS `vmtest`.`hello2`$$ 
CREATE DEFINER = `root`@`localhost` FUNCTION `vmtest`.`hello2` (s CHAR(20)) 
RETURNS TEXT 
BEGIN 
    DECLARE RETURNID INTEGER; 
    DECLARE RETURNNAME TEXT; 
    DECLARE PARENTID INTEGER; 
    DECLARE RTN TEXT; 
    DECLARE RTNNAME TEXT; 
    SET RTN = ""; 
    SET PARENTID = s; 

    WHILE PARENTID > 0 DO 
     SELECT 
     t1.category_parent_id,t2.category_name INTO RETURNID,RETURNNAME 
     FROM e255g_virtuemart_category_categories AS t1 
     INNER JOIN e255g_virtuemart_categories_de_de AS t2 
     on t1.id = t2.virtuemart_category_id 
     WHERE t1.id = PARENTID; 
     IF RETURNID >0 THEN 
      IF RTN ="" THEN 
       SET RTN = RETURNID; 
      ELSE 
       SET RTN = CONCAT(RTN, ',', RETURNID); 
       SET RETURNNAME = CONCAT(RTNNAME, ',', RETURNNAME); 
      END IF; 
     END IF; 
     SET PARENTID = RETURNID;    
    END WHILE; 
    RETURN RETURNNAME; 
END$$ 

DELIMITER ; 

所以這是... INTO var1,var2, ...