如何在MySQL中创建存储过程

时间:2018-05-17 08:44:12

标签: mysql stored-procedures

我的桌子是

create table employee(
id int(10) auto_increment primary key,
name varchar(100),
addressId int(10)
);
go
create table address(
id varchar(10) auto_increment primary key,
name varchar(100)
);

这是我的程序

create procedure insert_employee(IN emp_name varchar(100),IN emp_address varchar(100))
begin


    DECLARE @addressId varchar(10);
    SELECT @addressId:=id from address where name LIKE '%'+emp_address+'%';


    IF @addressId = ''
    THEN 
        set @addressId= 'DBS-2136';-- It will come form function
        INSERT INTO address values(@addressId,emp_address);
    END IF

    INSERT INTO employee values(emp_name,@addressId);
END

我不明白是什么问题。如果我在ms sql server中写入这种类型的if条件,则没有错误。每次执行程序时,如果是,请说错误。我在谷歌搜索,但没有想到这一点。声明变量存在问题。如果我复制形式mysql文档,也无法正常工作。这是为什么? 请帮我 1.在mysql存储过程下声明变量的正确方法是什么, 2.如何在mysql存储过程中写入条件。 谢谢

2 个答案:

答案 0 :(得分:1)

mysql和mssql之间有很多区别。声明的变量不应包含' @',必须终止所有语句,+是算术运算符,如果过程有多个语句,则必须在前后设置分隔符。 进一步阅读 How to declare a variable in MySQL? https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html

答案 1 :(得分:0)

来自MySQL reference Manual

  

IF ... END IF块与存储程序中使用的所有其他流控制块一样,必须以分号结束

IF @addressId = ''
THEN 
    set @addressId= 'DBS-2136';-- It will come form function
    INSERT INTO address values(@addressId,emp_address);
END IF;