2013-10-03 14 views
6

sto provando a fare una stored procedure con parametri usando mysql workbench per inserire dati in una tabella.inserisce nella stored procedure con parametri MYSQL non funziona

cosa sto facendo di sbagliato ??

USE deb42181_ramos; 
CREATE PROCEDURE sp_insertuser(IN gebruikersnaamparam varchar(10) 
, IN wachtwoordparam VARCHAR(50) 
, IN voornaamparam VARCHAR(15) 
, IN achternaamparam VARCHAR(15) 
, IN tussenvoegselparam VARCHAR(10) 
, IN gebruikerlevelparam INT) 
BEGIN 

INSERT INTO gebruikers (
gebruikersnaam 
, wachtwoord 
, voornaam 
, achternaam 
, tussenvoegsel 
, gebruikerlevel) 

    VALUES (gebruikersnaamparam 
    , wachtwoordparam 
    , voornaamparam 
    , achternaamparam 
    , tussenvoegselparam 
    , gebruikerlevelparam); 

END 

l'errore è in ultima fila dei valori dopo), egli pretende molto si aspettano una;
saluti Jeroen

+0

Qual è il messaggio di errore? –

risposta

8

È necessario modificare il delimitatore, in questo modo:

# change the delimiter to $$, so you can use semicolon in create procedure 
DELIMITER $$ 

USE deb42181_ramos$$ 

DROP PROCEDURE IF EXISTS sp_insertuser$$ 

CREATE PROCEDURE sp_insertuser(IN gebruikersnaamparam varchar(10) 
, IN wachtwoordparam VARCHAR(50) 
, IN voornaamparam VARCHAR(15) 
, IN achternaamparam VARCHAR(15) 
, IN tussenvoegselparam VARCHAR(10) 
, IN gebruikerlevelparam INT) 
BEGIN 

INSERT INTO gebruikers (
gebruikersnaam 
, wachtwoord 
, voornaam 
, achternaam 
, tussenvoegsel 
, gebruikerlevel) 

    VALUES (gebruikersnaamparam 
    , wachtwoordparam 
    , voornaamparam 
    , achternaamparam 
    , tussenvoegselparam 
    , gebruikerlevelparam); 

END$$ 
# change the delimiter back to semicolon 
DELIMITER ; 
+0

ow grazie ora funziona, ma perché ne ho bisogno? wat è la ragione? – Jeroen

+4

Per impostazione predefinita, mysql riconosce il punto e virgola come delimitatore di istruzioni, pertanto è necessario ridefinire temporaneamente il delimitatore per fare in modo che mysql passi l'intera definizione del programma memorizzato al server. In caso contrario, MySQL interrompe CREATE PROCEDURE, prima che raggiunga l'istruzione END. Puoi vedere la documentazione per maggiori dettagli: http://dev.mysql.com/doc/refman/5.5/en/stored-programs-defining.html – Zagor23

2
DELIMITER $$ 
DROP PROCEDURE IF EXISTS `database_name`.`ins`$$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `ins`(in nam varchar(50),in username varchar(50), in branch varchar(50)) 
BEGIN 
insert into table_name(nam,user_name,branch) values(nam,username,branch); 
    END$$ 
DELIMITER ; 

call ins('sas','sdsd','sdsd') 
+0

grazie per questo codice lavorabile .... :) –