2012-04-01 19 views
1

(2挿入して)私はこのテーブル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, 
     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サーバのバージョンに対応するマニュアルをチェックし、適切な構文を 'insert into adresa(judet、localitate、codPostal、strada、nr、bl、ap、email、www)値の近くで使用するようにしてください('行4

私は が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

0

DECLARE、したがっては;で区切られる必要がある、別の文ですINSERTまたはSELECTなどの文など

また、movプロシージャ宣言の開始直前の最初の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(); 
+0

iの後にデリミタを入れてください。私はこの場所をする。 DECLAREの後にこのエラーが表示される 'ERROR 1064(42000):SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が 'DECLARE vEvenimentId int DEFAULT 0;'の近くで使用できるようにしてください。 – xnl96

+0

@ alexc-tin:私の更新をご覧ください。 –

関連する問題