微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用存储过程进行更新,删除和选择? 更新示例选择示例删除示例

如何解决如何使用存储过程进行更新,删除和选择? 更新示例选择示例删除示例

当我尝试使用更新,删除或选择时,代码将在所有行中执行命令。

更新示例

   DELIMITER $$
CREATE PROCEDURE update_cinema
(IN NOME_FANTASIA varchar(100),IN LOGRADOURO varchar(100),IN CIDADE varchar(100),IN ESTADO varchar(100),IN LOTACAO int,in ID_CINEMA int)
BEGIN
UPDATE tb_cinema
SET NOME_FANTASIA = nome_fantasia,LOGRADOURO=LOGRADOURO,CIDADE= cidade,ESTADO= estado,LOTACAO= lotacao
WHERE id_cinema = id_cinema;
END $$
DELIMITER ;

CALL UPDATE_CINEMA ('Muda','Por favor','da certo','MS',400,16)

The update executes in 16,17 and 18 instead of only in 16

选择示例

    DELIMITER $$
CREATE PROCEDURE SELECT_cinema
(IN NOME_FANTASIA varchar(100))
BEGIN
SELECT * from tb_cinema
 where nome_fantasia = nome_fantasia;
END $$
DELIMITER ;

It is selecting all rows instead of the row that i choose

删除示例

DELIMITER $$
CREATE PROCEDURE DELETE_CINEMA
(IN NOME_FANTASIA varchar(100))
BEGIN
DELETE  from tb_cinema
 where nome_fantasia = nome_fantasia;
END $$
DELIMITER ;

call DELETE_cinema ('test_Select')

It is deleting all rows

解决方法

您需要提供与实际列名不同的参数名。否则,名称是引用参数还是列名称是不确定的:MySQL通过优先考虑列名称来解决这种歧义。结果,where条件变成无操作,就像set分配一样。

这是更新过程的示例。我为所有参数名称添加了p_前缀,以消除歧义:

create procedure update_cinema(
    in p_nome_fantasia varchar(100),in p_logradouro varchar(100),in p_cidade varchar(100),in p_estado varchar(100),in p_lotacao int,in p_id_cinema int
)
begin
    update tb_cinema
    set 
        nome_fantasia = p_nome_fantasia,logradouro = p_logradouro,cidade = p_cidade,estado = p_estado,lotacao = p_lotacao
    where id_cinema = p_id_cinema;
end $$
delimiter ;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。