MySQL: использование локальных переменных в предложении WHERE для CONCAT INSERT INTO SELECT - PullRequest
0 голосов
/ 29 мая 2018

Я просто хочу создать процедуру, которая создает таблицу с именем переменной и вставляет материал, который я выбираю из другой таблицы.Тем не менее создание таблицы работает, но я всегда получаю сообщение об ошибке при попытке включения в следующий код.

Всегда говорится, что у меня есть какая-то синтаксическая ошибка в той части, где я проверяю дату предложенияс переменными из параметров.

Я надеюсь, что вы, ребята, понимаете меня и можете мне помочь.

DELIMITER //
CREATE OR REPLACE PROCEDURE Prov (start_d DATE, end_d DATE, month_name CHAR(20))
BEGIN   



    SET @table := month_name;
    SET @start_d = start_d;
    SET @end_d = end_d;

    SET @sql_text1 := CONCAT('
        CREATE TABLE ',@table,'(
        provision_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
        name VARCHAR(50) NOT NULL, 
        provision float NOT NULL)'
    ); 

    PREPARE stmt from @sql_text1; 
    EXECUTE stmt; 


    SET @sql_text2 := CONCAT('
    INSERT INTO', @table, ' 
    (
        SELECT Unternehmen.unternehmen_ID, Unternehmen.name, 
        SUM(Jobangebot.dauerStunden * Jobangebot.bezahlung * 0.02) AS Provision 
        FROM unternehmen 
        INNER JOIN Jobangebot ON Unternehmen_ID = unternehmen_ID_FK 
        WHERE status = ''angenommen'' OR status = ''offen'' 
        AND dateOfOffer >=, ' @start_d,' AND dateOfOffer <=', @end_d,' 
        GROUP BY unternehmen.unternehmen_ID
    )');

    PREPARE stmt from @sql_text2; 
    EXECUTE stmt; 

END
 //

DELIMITER ;


call Prov('2018-05-01','2018-05-31', 'March');

1 Ответ

0 голосов
/ 29 мая 2018

Вам нужно будет считать свою дату буквальной (заключите ее в кавычки).

[...]
WHERE status = ''angenommen'' OR status = ''offen'' 
AND dateOfOffer >= "',@start_d,'" AND dateOfOffer <= "',@end_d,'"
GROUP BY unternehmen.unternehmen_ID
[...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...