2014-01-17 48 views
0

我不知道如何解決它:意外的end_of_input,期待';' MySQL的

drop trigger if exists insertusuario; 
CREATE TRIGGER insertusuario 
BEFORE INSERT ON usuario 
FOR EACH ROW 
begin 
GRANT ALL ON *.* TO ',new.nombre,'@'%' IDENTIFIED BY ',new.contraseña,' WITH GRANT OPTION; 
end; 
+0

它看起來像你的混合應用程序代碼(變量,如'new.nombre')和MySQL的代碼,如果是這樣,你做圍繞'%'字符的錯誤。 –

回答

1

更改Grant命令語句編寫象下面這樣:

SELECT 
    CONCAT('GRANT ALL ON *.* TO ''', 
      new.nombre, 
      '''@''%'' IDENTIFIED BY ''', 
      new.contraseña, 
      ''' WITH GRANT OPTION' 
    ) INTO @temp_grant_sql_string; 

使用準備好的語句來執行這個生成的授權聲明;

PREPARE stmt FROM @temp_grant_sql_string; 
EXECUTE stmt; 
deallocate prepare stmt; -- or drop prepare stmt; 

讓我希望您在註冊存儲過程之前知道delimiter部分。

使用:delimiter $$觸發器定義之前。並且,
使用:delimiter ;觸發器定義後,重置爲默認值。

最後,你的觸發器應該去閱讀這樣的:

delimiter $$; 

drop trigger if exists insertusuario 
$$ 

CREATE TRIGGER insertusuario BEFORE INSERT ON usuario 
    FOR EACH ROW BEGIN 
    SELECT 
    CONCAT('GRANT ALL ON *.* TO ''', 
      new.nombre, 
      '''@''%'' IDENTIFIED BY ''', 
      new.contraseña, 
      ''' WITH GRANT OPTION' 
    ) INTO @temp_grant_sql_string; 

    PREPARE stmt FROM @temp_grant_sql_string; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; -- or DROP PREPARE stmt; 

END; 

$$ 

delimiter ;