【问题标题】:mysql stored procedure (with 2 insert) errormysql存储过程(带2个插入)错误
【发布时间】:2012-04-01 13:48:24
【问题描述】:

我有这张桌子

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

我得到这个错误

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 4 行的“插入 adresa(judet,localitate,codPostal,strada,nr,bl,ap,email,www) values(') 附近使用

如果我在 mysql 命令中单独尝试 insert into adresa ... 我没有收到错误,我做错了什么?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    像这样试试(试过了,对我有用):

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

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

    【讨论】:

      【解决方案2】:

      DECLARE 是单独的语句,因此需要用; 分隔,例如INSERTSELECT 或任何其他语句。

      另外,将第一个 DELIMITER 语句移到过程声明开始之前。

      所以,

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

      【讨论】:

      • 如果我去这个地方;在 DECLARE 之后我收到此错误 'ERROR 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在“DECLARE vEvenimentId int DEFAULT 0;”附近使用正确的语法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 2016-02-08
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多