mysql存储过程(带2个插入)错误

mysql存储过程(带2个插入)错误,mysql,Mysql,我有这张桌子 create table eveniment( + evenimentId bigint not null auto_increment primary key, evenimentDenumire varchar(500), adresaId int not null); create table adresa( adresaId bigint not null auto_increment primary key,

我有这张桌子

create table eveniment( +
       evenimentId bigint not null auto_increment primary key,
       evenimentDenumire varchar(500),
       adresaId int not null);

create table adresa(
       adresaId bigint not null auto_increment primary key,
       localitate varchar(500),
       judet varchar(500),
       codPostal varchar(50),
       strada varchar(500),
       nr varchar(50),
       bl varchar(50),
       ap varchar(5),
       email varchar(500),
       www varchar(500));
这个程序呢

DELIMITER //
drop procedure IF EXISTS insertEveniment;
CREATE PROCEDURE insertEveniment()
BEGIN
DECLARE vAdresaEvenimentId int DEFAULT 0 
insert into adresa(judet,localitate,codPostal,strada,nr,bl,ap,email,www) 
    values('judet','localitate','cod postal','strada','numar','bloc','ap','email','www');
select last_insert_id() into vAdresaEvenimentId;
DECLARE vEvenimentId int DEFAULT 0 
insert into eveniment(evenimentDenumire,adresaId) values('concurs informatic 1',vAdresaEvenimentId);
select last_insert_id() into vEvenimentId;
END //
DELIMITER ;
call insertEveniment();
我得到了这个错误

错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用“插入到adresa(judet、localitate、codPostal、strada、nr、bl、ap、email、www)值(”第4行)附近的正确语法


如果我在mysql命令中分别尝试插入adresa…,我不会出错,我做错了什么?

声明
是一个单独的语句,因此需要用一个
分隔,就像
插入
选择
或任何其他语句一样

另外,将第一个
分隔符
语句移动到过程声明开始之前

所以

分隔符//
如果存在插入设备,则删除程序;
分隔符//
创建过程插入设备()
开始
声明vAdresaEvenimentId int默认值为0;
插入adresa(judet、localitate、codPostal、strada、nr、bl、ap、电子邮件、www)
值('judet'、'localitate'、'cod postal'、'strada'、'numar'、'bloc'、'ap'、'email'、'www');
选择最后一个插入id()到vAdresaEvenimentId中;
声明vEvenimentId int默认值为0;
在eveniment(evenimentDenumire,adresaId)值中插入('concurs informatic 1',vadresaaevenimentid);
选择last_insert_id()到VevenmentId中;
结束//
定界符;
调用insertEveniment();

DECLARE
是一个单独的语句,因此需要用
分隔,如
INSERT
SELECT
或任何其他语句

另外,将第一个
分隔符
语句移动到过程声明开始之前

所以

分隔符//
如果存在插入设备,则删除程序;
分隔符//
创建过程插入设备()
开始
声明vAdresaEvenimentId int默认值为0;
插入adresa(judet、localitate、codPostal、strada、nr、bl、ap、电子邮件、www)
值('judet'、'localitate'、'cod postal'、'strada'、'numar'、'bloc'、'ap'、'email'、'www');
选择最后一个插入id()到vAdresaEvenimentId中;
声明vEvenimentId int默认值为0;
在eveniment(evenimentDenumire,adresaId)值中插入('concurs informatic 1',vadresaaevenimentid);
选择last_insert_id()到VevenmentId中;
结束//
定界符;
调用insertEveniment();
像这样尝试(尝试过,对我来说很有效):

您使用的
drop-procedure
语句带有错误的分隔符(您曾将delimiter设置为//但随后在语句末尾添加了;。在设置分隔符之前添加
drop-procedure
语句,它将正常工作。另外,在
DECLARE

之后添加分隔符(尝试过,对我有效):


您正在使用带有错误分隔符的
drop procedure
语句(您将delimiter设置为//但随后将;放在语句的末尾。在设置delimiter之前放置
drop procedure
语句,它将正常工作。此外,如果我这样做,请将delimiter放在
DECLARE

之后;在DECLARE之后,我将收到此错误”错误1064(42000):您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“DECLARE VevenmentId int DEFAULT 0;”附近使用的正确语法;如果我在此处执行此操作;在声明后我收到此错误”错误1064(42000):您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“DECLARE VevenmentId int DEFAULT 0;”附近使用的正确语法
DELIMITER //
drop procedure IF EXISTS insertEveniment;
DELIMITER //
CREATE PROCEDURE insertEveniment()
BEGIN
DECLARE vAdresaEvenimentId int DEFAULT 0 ;
insert into adresa(judet,localitate,codPostal,strada,nr,bl,ap,email,www) 
    values('judet','localitate','cod postal','strada','numar','bloc','ap','email','www');
select last_insert_id() into vAdresaEvenimentId;
DECLARE vEvenimentId int DEFAULT 0 ;
insert into eveniment(evenimentDenumire,adresaId) values('concurs informatic 1',vAdresaEvenimentId);
select last_insert_id() into vEvenimentId;
END //
DELIMITER ;
call insertEveniment();
drop procedure IF EXISTS insertEveniment;
DELIMITER //
CREATE PROCEDURE insertEveniment()
BEGIN
DECLARE vAdresaEvenimentId int DEFAULT 0;
DECLARE vEvenimentId int DEFAULT 0;
insert into adresa(judet,localitate,codPostal,strada,nr,bl,ap,email,www) 
    values('judet','localitate','cod postal','strada','numar','bloc','ap','email','www');
select last_insert_id() into vAdresaEvenimentId;
insert into eveniment(evenimentDenumire,adresaId) values('concurs informatic 1',vAdresaEvenimentId);
select last_insert_id() into vEvenimentId;
END //
DELIMITER ;
call insertEveniment();