2010-11-18 10 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

[OK]を私は..助けてくれてありがとうをPROCを呼び出した後の値を選択する波平...今愚かな感じ.. – Lee

関連する問題