Mysql程序,在where子句中使用参数

时间:2016-12-15 12:50:18

标签: mysql sql stored-procedures

我从phpmyadmin制作了这个程序,但是它不起作用,我将 record_id 中的最后一个单词替换为指定的字符串id并且工作正常,但是当我使用该参数不起作用时。

DROP PROCEDURE `prcd_update_record`;
CREATE DEFINER=`root`@`localhost` 
PROCEDURE `prcd_update_record`(
    IN `talep_id` VARCHAR(24), 
    IN `vall` INT(10)
) 
NOT DETERMINISTIC 
MODIFIES SQL DATA SQL 
SECURITY INVOKER 

UPDATE      `talep_malzeme` 
SET         `kalan_miktar` = vall
WHERE       `talep_malzeme`.`id` = talep_id;

我执行它是这样的:

SET @p0='33'; SET @p1='57fb7911ea91e9efa'; CALL `prcd_update_record`(@p0, @p1);

3 个答案:

答案 0 :(得分:1)

DROP PROCEDURE IF EXISTS `prcd_sevk_toplam`;
create procedure prcd_sevk_toplam(talep_id int, vall VARCHAR(255))
BEGIN
    UPDATE  `talep_malzeme` SET `kalan_miktar` = vall WHERE `talep_malzeme`.`id` = talep_id;
END;

希望这会对你有所帮助。

答案 1 :(得分:1)

看起来您的参数顺序错误,请尝试

CALL `prcd_sevk_toplam`(@p1, @p0);

答案 2 :(得分:1)

您应根据参数定义为参数提供适当的值。您的程序接受以下参数

PROCEDURE `prcd_sevk_toplam`(
    IN `talep_id` VARCHAR(24), 
    IN `vall` INT(10)

您正在将它们设置为varchar。这可能是这里的问题。你应该将它们设置为

SET @p0=33; 
SET @p1='57fb7911ea91e9efa'; 
CALL `prcd_sevk_toplam`(@p1, @p0);