我正在编写一个脚本来更新数据库模式,脚本如下:
delimiter //
begin
set @check_exists = 0;
select count(*)
into @check_exists
from information_schema.columns
where table_schema = 'my_app'
and table_name = 'users'
and column_name = 'points';
if (@check_exists = 0) then
alter table my_app.users
add points int not null default 0
end if;
end //
delimiter
当我运行它时,我得到下面的错误:
Reason:
SQL Error [1064] [42000]: (conn=34) You have an error in your SQL syntax;
check the manual that corresponds to your MariaDB server version for the right syntax
to use near 'set @check_exists = 0;
我已经检查了下面两个帖子的答案,但没有一个能解决我的问题。
2条答案
按热度按时间8e2ybdfx1#
我认为在开始语句之前需要有一个CREATE PROCEDURE。所以:
补充说明:if语句中的check_exists需要一个@
vjhs03f72#
根据开始END文档here,语法为:
开始[NOT ATOMIC] [statement_list] END [end_label]
以下是我不知道的:
当在存储过程之外使用时,需要NOT ATOMIC。在存储过程或匿名块中,开始单独启动一个新的匿名块。
由于我没有在存储过程中使用开始END,因此必须在
BEGIN
关键字之后添加NOT ATOMIC
。代码应该是这样的: