MySQL Select into variable

15,646

Solution 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?

Solution 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.

Share:
15,646

Related videos on Youtube

Leo
Author by

Leo

Updated on September 25, 2022

Comments

  • Leo
    Leo over 1 year

    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

  • Leo
    Leo over 11 years
    Mhhh, tried it but doesn't work. The problem seems to be more related to prepare/execute/deallocate. If I execute the select into directly it works: "DECLARE myvar INT; DECLARE myvar2 INT; SELECT 1,2 into myvar, myvar2; SELECT myvar, myvar2;" but when I prepare the sql stmt first it doesn't seem to recognize the variable and it complaints about it not being declared: " DECLARE myvar INT; DECLARE myvar2 INT; SET @sql=CONCAT('SELECT 1,2 into myvar, myvar2'); PREPARE s1 FROM @sql; EXECUTE s1; DEALLOCATE PREPARE s1; SELECT myvar, myvar2;"
  • Leo
    Leo over 11 years
    Thank you slaakso, the thing is that I need the dynamic sql, I need to prepare the query first dynamically due to selecting from different tables and other conditions.
  • Leo
    Leo over 11 years
  • Jay Blanchard
    Jay Blanchard over 6 years
    While this code may answer the question, providing additional context regarding why and/or how this code answers the question improves its long-term value. A good answer will always have an explanation of what was done and why it was done in such a manner, not only for the OP but for future visitors to SO.