2010-11-18 38 views
0

我試着運行下面的存儲過程,但它不給任何輸出.. 如果我選擇的值了,而無需使用OUT參數,它工作正常..MySQL存儲過程 - 輸出的問題價值觀

SELECT PWORD,REPLYATTR; - 這工作正常

但這樣做'正確'不出於某種原因,任何想法傢伙?

DROP PROCEDURE `uuu`// 

CREATE DEFINER=`auth_tracker`@`%` PROCEDURE `uuu`(IN USERNAME varchar(100), 
                OUT REPLYATTR varchar(100), 
                OUT PWORD varchar(100)) 

BEGIN 

DECLARE USER_PROD_ID INTEGER; 
DECLARE ATTR VARCHAR(100); 
DECLARE VAL VARCHAR(100); 
DECLARE no_more_rows BOOLEAN; -- Loop exit condition; set by NOT FOUND handler 

DECLARE PoolHint VARCHAR(100) DEFAULT NULL; 
DECLARE FramedIP VARCHAR(100) DEFAULT NULL; 
DECLARE FramedRoute VARCHAR(100) DEFAULT NULL; 

-- DECLARE PWORD VARCHAR(100) DEFAULT NULL; 
-- DECLARE REPLYATTR VARCHAR(100); 


DECLARE cur1 CURSOR 
    FOR 
SELECT attribute_name, value 
    FROM user_product_attribute upa, product_attribute pa 
    WHERE upa.product_attribute_id = pa.product_attribute_id 
    AND upa.user_product_id = USER_PROD_ID; 

-- Declare handler to set loop exit condition 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE; 

-- Main logic 
SELECT upa.user_product_id 
    INTO USER_PROD_ID 
    FROM user_product_attribute upa, user_product up, product_attribute pa, product p 
WHERE pa.attribute_name = 'username' 
    AND pa.product_attribute_id = upa.product_attribute_id 
    AND pa.product_id = p.product_id 

    AND up.status  = 'active' 
    AND p.product_name = 'broadband' 
    AND upa.value  = USERNAME 

LIMIT 1; 

    -- Open the cursor 
    OPEN cur1; 

    -- Start Looping 
    the_loop: LOOP 

    -- Get Attrib + value 
    FETCH cur1 
    INTO ATTR, VAL; 

    -- Exit if no rows 
    IF no_more_rows THEN 
    CLOSE cur1; 
    LEAVE the_loop; 
    END IF; 

    -- Grab certain vars 
    IF ATTR = 'poolhint' THEN SET PoolHint := VAL; END IF; 
    IF ATTR = 'Framed-IP-Address' THEN SET FramedIP := VAL; END IF; 
    IF ATTR = 'Framed-Route' THEN SET FramedRoute := VAL; END IF; 
    IF ATTR = 'password' THEN SET PWORD := VAL; END IF; 

    -- End Loop  
    END LOOP the_loop; 

-- Concat 
IF (FramedIP IS NOT NULL) THEN SET REPLYATTR := CONCAT('Framed-IP-Address=',FramedIP); 
ELSEIF (PoolHint IS NOT NULL) THEN SET REPLYATTR := CONCAT('PoolHint=',PoolHint); 
END IF; 

-- Add Route 
IF (FramedIP IS NOT NULL AND FramedRoute IS NOT NULL) 
THEN SET REPLYATTR := CONCAT(REPLYATTR,',Framed-Route="',FramedRoute,'"'); 
END IF; 

END// 

回答

1

你打電話過程如何?

如果您在調用proc時傳遞用戶定義的變量,那麼您應該得到所需的輸出。

例子:

CALL uuu('bobby',@replyattr,@pname); 
SELECT @replyattr,@pname; 
+0

好吧,我現在覺得愚蠢...我不是調用PROC後選擇的值..感謝您的幫助.. – Lee 2010-11-18 17:41:56