我正在尝试创建一个过程,该过程(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
您为什么要为此使用存储过程?无论如何,您都可以使用alter table
和default
值来执行此操作:
alter table project add hours float default 0.0
Here是db <>小提琴。
我不建议在存储过程中包装此类逻辑。大概只做一次。如果确实需要在存储过程中执行此操作,则只需运行以上命令。如果该列已存在,则MySQL返回错误-您可以在存储过程中处理该错误。
更正的查询:
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