如何根据Mysql中的参数自动创建uuid触发器?

时间:2017-05-29 14:54:15

标签: mysql sql

我想创建一个触发器来自动创建一个uuid。所以我编写这样的代码,它编译得很好,但是当我调用它时运行错误。如何修复它?

delimiter// 
DROP PROCEDURE  IF  EXISTS sp_uuid_auto;
CREATE PROCEDURE sp_uuid_auto(IN triggerName VARCHAR(32),
IN tableName  VARCHAR(32),IN idName  VARCHAR(32))

begin    
 drop trigger if exists triggerName;   
 set @v_sqlStr=concat('create TRIGGER ', triggerName,
' before insert on ',tableName,' FOR EACH ROW if (new.id='''' or new.id is null) then 
set new.id= REPLACE(uuid(),''-'','''');  
 end if ;');  
PREPARE statement FROM @v_sqlStr;
EXECUTE statement;
-- DEALLOCATE PREPARE statement; 
end;
 //

我称之为程序:call sp_uuid_auto('tri_t_menu','t_menu','id');

结果是:
1295 - This command is not supported in the prepared statement protocol yet

1 个答案:

答案 0 :(得分:2)

在准备好的语句中允许的#34; SQL语法标题下阅读https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html。"它列出了您可以在PREPARE中使用的语句类型。

之后它说:

  

MySQL 5.7不支持其他语句。

CREATE TRIGGER语句不在列出的语句中,因此它属于"其他语句"类别。你不能在PREPARE中创建TRIGGER。

因此,您无法在存储过程中执行此操作。您必须在应用程序中创建触发器,并在提交CREATE TRIGGER语句之前格式化动态表名称​​。