2016-02-03 3 views
1

я сделал процедуру, перечисленным ниже:MySQL присвоить значение запроса в переменную

delimiter // 
CREATE PROCEDURE processPayment(in id int(11), status int(11)) 
BEGIN 
declare msg_a text DEFAULT "Payment was marked as sent"; 
declare msg_d text DEFAULT "Payment was marked as denied and user balance was updated"; 
declare msg_w text DEFAULT "Wrong payment status"; 
declare msg_u text DEFAULT "Wrong payment ID"; 
declare amount varchar(255) DEFAULT 0; 
amount = "SELECT amount FROM payments WHERE id = id"; 
user_id = "SELECT userid FROM payments WHERE id = id"; 

IF(SELECT COUNT(*) FROM payments WHERE id = id AND status = status) = 0 
THEN 
SELECT msg_u; 
END IF; 

IF(status = 0) 
THEN 
SELECT msg_w; 
END IF; 

IF(status = 1) 
THEN 
UPDATE payments SET status = status WHERE id = id; 
SELECT msg_a; 
END IF; 

IF(status = -1) 
THEN 
UPDATE payments SET status = status WHERE id = id; 
UPDATE balances SET actual = actual+amount WHERE user_id = user; 
SELECT msg_d; 
END IF; 

END 

Но когда я пытаюсь добавить его в базу данных я получаю ошибку: Что-то не так в вашем синтаксисе рядом с «=«SELECT количества FROM платежей WHERE id = id "; user_id = «SELECT идентификатор пользователя FROM ра» строка 8 мне нужно присвоить значение запроса в переменную. Как я могу это сделать? Заранее спасибо за любую помощь.

ответ

2

У вас есть два пути для того, чтобы добиться этого. Во-первых с SET:

SET amount = (SELECT amount FROM payments WHERE id = id); 
SET user_id = (SELECT userid FROM payments WHERE id = id); 

Или с синтаксисом SELECT INTO:

SELECT amount INTO amount FROM payments WHERE id = id; 
SELECT userid INTO user_id FROM payments WHERE id = id; 

Вы даже можете достичь его в один ряд с этим вторым способом:

SELECT amount, userid INTO amount, user_id FROM payments WHERE id = id; 
+0

благодарит за помощь! –

Смежные вопросы