[英]How does one create a stored procedure in Node.js using the mysql library?
如何使用mysql库在Node.js中创建存储过程? npm软件包mysql是否支持创建存储过程,或者此代码中有错误? 这是我正在使用的npm库: https : //www.npmjs.com/package/mysql
我正在尝试自动为一个开源项目设置数据库,以帮助新的贡献者启动和运行他们的开发环境(并使我们所有人都在同一个数据库架构上)。
为此,我编写了一个脚本,该脚本应该将所有命令发送到mysql实例以设置数据库。 创建表是可行的,但是创建新的存储过程始终会导致错误。 当我在MySQL Workbench中运行命令时,创建脚本确实起作用,因此问题似乎仅限于该脚本。
var emails =
"CREATE TABLE emails (" +
"`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY," +
"`email` VARCHAR(2048) CHARACTER SET utf8" +
");";
var addEmail =
"DELIMITER //\n" +
"CREATE PROCEDURE addEmail(IN email VARCHAR(2048))\n" +
"BEGIN\n" +
"INSERT INTO emails (email) VALUES (email);\n" +
"END //\n" +
"DELIMITER ;";
var query = [];
query.push(emails);
query.push(addEmail);
for(var i = 0; i < query.length; i++) {
console.log(query[i]);
connection.query(query[i], function (err, rows, fields) {
if (!err) {
console.log("success"); //emails succeeds, as do other create table commands
} else {
console.log('Error while performing Query.'); //any queries that create stored procedures fail
}
});
}
从接受的答案中获得出色的建议,更正后的代码如下所示:
var addEmail =
"CREATE PROCEDURE addEmail(IN email VARCHAR(2048))\n" +
"BEGIN\n" +
"INSERT INTO emails (email) VALUES (email);\n" +
"END";
以编程方式运行SQL时,无需使用DELIMITER
。 仅当使用mysql
客户端手动或从脚本文件执行SQL语句流时,才需要DELIMITER。 一次运行一个查询时,您不必解决有关是否;
任何歧义;
过程定义内部是语句的结尾。
您最好从查询中检查错误状态,但是您也应该养成检查错误类型和错误消息的习惯。 这将帮助您解决多种类型的问题,而无需发布到Stack Overflow并希望有人迅速回答您的问题!
connection.query(query[i], function (err, rows, fields) { if (!err) { console.log("success"); } else { console.log('Error while performing Query.'); console.log(err.code); console.log(err.message); } });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.