2013-06-02 38 views
0

我的问题是这段代码。如何从select中使用变量来调用存储过程?

DELIMITER $$ 

DROP PROCEDURE IF EXISTS agregar_abono$$ 
CREATE PROCEDURE agregar_abono(IN pid_cliente BIGINT, IN pfecha_abono DATE, IN pmonto_abono FLOAT) 
BEGIN 
    DECLARE @idabono BIGINT; 

    -- OTHER CODE ... 

    SELECT id_abono AS idabono FROM abono WHERE fk_cliente = pid_cliente ORDER BY id_abono DESC LIMIT 1; 

    SELECT CONCAT('>', idabono); 


    CALL cobrar_abono(pid_cliente, vid_abono); 

END $$ 

两个SELECT返回的过程:

idabono = 52     --> good! (in the first select) 
CONCAT('>', idabono) = null ---> what?? 

我不知道,因为没有存储在这个变量的结果在存储过程中使用。我使用AS来存储变量。

存储过程调用的标题是:

CREATE PROCEDURE cobrar_abono(IN pid_cliente BIGINT, IN pid_abono BIGINT) 
+0

更换请说明您'vid_abono'变量的值应该怎么样子的呢? – peterm

+0

你想用'CONCAT'做什么? – peterm

回答

0

你在找这个?

... 
DECLARE idabono BIGINT; 
-- OTHER CODE ... 
SET idabono = (SELECT id_abono 
       FROM abono 
       WHERE fk_cliente = pid_cliente 
       ORDER BY id_abono DESC 
       LIMIT 1); 

SELECT声明本身或许可以

SET idabono = (SELECT MAX(id_abono) 
       FROM abono 
       WHERE fk_cliente = pid_cliente); 
+0

@felipedz你的问题需要更多帮助吗? – peterm

+0

感谢@peterm ...代码对我有用!你能告诉我'AS'和'SET'分配有什么区别。当你使用每个? – felipedz

+0

@felipedz“AS”不分配它只是简单地为结果集中的列分配一个名称。要为变量赋值,可以使用'SET'或'SELECT INTO'。阅读[存储程序中的变量](http://dev.mysql.com/doc/refman/5.1/en/stored-program-variables.html)以获得澄清。 – peterm

相关问题