如何使用SQL过程添加新属性并同时更新值?

问题描述 投票:0回答:2

我正在尝试创建一个过程,该过程(1)将名为“小时”的新属性添加到名为“项目”的表中(如果它不具有“小时”属性),并且(2)初始化“小时”的值到0.0。下面是我尝试过的代码(使用myPhpAdmin),但是它给了我SQL语法错误。我做错了什么?

错误消息说:“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以获取在'UPDATE Project SET Hours = 0.0 where Project.Pnumber = p end if; end'附近使用的正确语法”

delimiter &
create procedure init(in p int(11))
begin
    declare attNum int;
    SELECT COUNT(*) INTO attNum FROM INFORMATION_SCHEMA.COLUMNS
        WHERE table_schema = 'MyDB'
        AND table_name = 'Project';
    if attNum < 5 then ALTER TABLE Project ADD Hours float; 
    end if;

     SELECT * FROM Project 
     where Project.Pnumber = p 
     UPDATE Project SET Hours = 0.0
     where Project.Pnumber = p
end
mysql sql phpmyadmin procedure
2个回答
1
投票

您为什么要为此使用存储过程?无论如何,您都可以使用alter tabledefault值来执行此操作:

alter table project add hours float default 0.0

Here是db <>小提琴。

我不建议在存储过程中包装此类逻辑。大概只做一次。如果确实需要在存储过程中执行此操作,则只需运行以上命令。如果该列已存在,则MySQL返回错误-您可以在存储过程中处理该错误。


0
投票

更正的查询:

delimiter &
create procedure init(in p int(11))
begin
    declare attNum int;
    SELECT COUNT(*) INTO attNum FROM INFORMATION_SCHEMA.COLUMNS
        WHERE table_schema = 'MyDB'
        AND table_name = 'Project';
    if attNum < 5 then ALTER TABLE Project ADD Hours float; 
    end if;

     SELECT * FROM Project 
     where Project.Pnumber = p;
     UPDATE Project SET Hours = 0.0
     where Project.Pnumber = p;
end
© www.soinside.com 2019 - 2024. All rights reserved.