您的位置:首页 > 数据库 > MySQL

执行MySQL脚本文件遇到的问题

2014-07-29 09:31 525 查看
在调试linux安装包的时候,发现原来的sql文件不能直接被mysql load。问题的根本原因是 触发器 和 存储过程 load失败。 现在的安装流程里面,是管理工具在第一次加载的时候,通过java,逐行调用sql语句来完成的。这里的说的“逐行”实际是按照"-- -------------"这样的分隔符。 mysql命令在load sql的时候,默认的分割符是";",也就是按照 ";" load 语句来执行。但是对于 存储过程 和 触发器,是一个代码块,在整个代码块中间是有 ";"的,导致不能正常的load。 比较标准的做法是在 sql文件中 创建触发器和存储过程的时候,使用delimiter 申明来临时改变 分割符。在触发器和存储过程的结尾使用 这个改变过的分隔符,表示存储过程或者触发器的结尾。然后再使用delimiter 把分隔符改回去。如下:
delimiter //  《== 有了这个申明后,mysql在load sql语句的时候,就不是以;为一个语句的结尾,而是以//为一个语句的结尾。
CREATE TRIGGER insert_radpostauth BEFORE INSERT ON radpostauth
FOR EACH ROW 
BEGIN
declare v_username varchar(20) default '';
declare v_usergroupid int(11) default null;
declare v_cardid varchar(18) default "";
declare v_cardtype varchar(20) character set utf8 default "";
declare v_groupname varchar(20) default "";
select name, usergroupid, cardid, cardtype into v_username, v_usergroupid, v_cardid, v_cardtype
from dbradius.bill_user where bill_user.account = new.userName;
select groupname into v_groupname from dbradius.bill_usergroup where bill_usergroup.usergroupid = v_usergroupid;
insert dbradius.bill_detail (account, username, acctsessionid, auditip, authResult, cardid, cardType, usergroupid, groupname)
values (new.userName, v_username, new.acctsessionid, new.auditip, new.authResult, v_cardid, v_cardtype, v_usergroupid, v_groupname);
END;//
delimiter ;
针对linux安装包的修改,可能导致windows下的安装包在load sql的时候出现问题。在Windows下执行了如上修改后的TRIGGER后,使用JDBC会执行失败。查看TRIGGER语句如下:
SELECT * FROM information_schema.`TRIGGERS`;

改为CMD运行时,无误,但是在Java中运行时报如下 的错误:
java.io.IOException: Cannot run program "mysql": CreateProcess error=2, ϵͳÕҲ»µ½ָ¶
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
	at java.lang.Runtime.exec(Runtime.java:593)
	at java.lang.Runtime.exec(Runtime.java:431)
	at java.lang.Runtime.exec(Runtime.java:328)
	at com.network.manager.nmsmanager.test.Test.runCmd(Test.java:29)
	at com.network.manager.nmsmanager.test.Test.main(Test.java:19)
表示权限不够,可以将执行的文件放到D盘下试一试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: