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();