2010-11-18 20 views
0

Im .. ben gayet iyi çalışıyor OUT parametreleri kullanmadan değerlerini seçerseniz ancak .. herhangi bir çıktı vermiyor, saklı yordamını çalıştırmak için çalışıyorMySQL saklı yordam - Problem çıkışı değerleri

SEÇ PWORD, REPLYATTR; - Bu,

'un gayet iyi çalışıyor. Ancak 'doğru' yapmak bir sebepten değil, herhangi bir fikre sahip değil mi?

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// 

cevap

1

Prosedürü nasıl arıyorsunuz?

Proc çağırdığınızda kullanıcı tanımlı değişkenleri geçirirseniz, istediğiniz çıktıyı almalısınız.

Örnek:

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

Ok i ben .. proc çağrıldıktan sonra değerleri seçerek yardım için teşekkürler değildi ... şimdi aptal hissediyorum .. – Lee

İlgili konular