问题
I want to further use in the procedure the values I get from a select into execution but can't figure out how to do it.
As a test I wrote the following but cannot use the v_1, v_2 or v_3 variables for further logic as they don't take the values 1,2 & 3 as i expected...
DROP PROCEDURE IF EXISTS MPT_testing; DELIMITER // CREATE PROCEDURE MPT_testing() READS SQL DATA BEGIN
DECLARE v_1 INT; DECLARE v_2 INT; DECLARE v_3 INT;
SET @sql=CONCAT('SELECT 1,2 into v_1, v_2'); PREPARE s1 FROM @sql; EXECUTE s1; DEALLOCATE PREPARE s1;
SET v_3 = v_1 + v_2;
SELECT v_3;
END //
DELIMITER ;
Can somebody help here please?
thanks, Leo
回答1:
Try changing 'SELECT 1,2 into v_1, v_2' to
'SELECT @v_1:=1, @v_2:=2'
or at least make sure you use @ whenever referencing your vars. see this thread for more info: SELECT INTO Variable in MySQL DECLARE causes syntax error?
回答2:
If you do not need the dynamic SQL inside your procedure, you can simpler syntax:
DECLARE v_1 INT; DECLARE v_2 INT; DECLARE v_3 INT;
SELECT 1,2 into v_1, v_2;
SET v_3 = v_1 + v_2;
SELECT v_3;
Using normal variables declared inside stored procedure are safer than the user-defined variables (@-variables) as a call to another stored procedure may change your user-defined variable value.
回答3:
You need to modify little code to work properly see my modification
DECLARE v_1 INT;
DECLARE v_2 INT;
DECLARE v_3 INT;
SET @sql=CONCAT('SELECT 1,2 into @v1, @v2');
PREPARE s1 FROM @sql;
EXECUTE s1;
SELECT @v1, @v2 INTO v_1, v_2;
SET v_3 = v_1 + v_2;
SELECT v_3;
DEALLOCATE PREPARE s1;
来源:https://stackoverflow.com/questions/13351479/mysql-select-into-variable