2013-10-03 115 views
6

我想使用mysql工作臺將參數插入到表中的參數存儲過程。插入存儲過程中使用參數MYSQL不工作

我在做什麼錯?

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 

錯誤是在後面的值的最後一行)他不期望一個;
方面的Jeroen

+0

什麼是錯誤訊息? –

回答

8

您需要更改分隔符,就像這樣:

# 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

現在感謝它的工作, 但爲什麼我需要那個?笏是原因? – Jeroen

+4

默認情況下,mysql本身將分號識別爲語句分隔符,因此您必須臨時重新定義分隔符以使mysql將整個存儲的程序定義傳遞給服務器。否則,在達到END語句之前,MySQL會中斷CREATE PROCEDURE。 你可以看到文檔的更多細節: 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

感謝這個代碼可行.... :) –