繁体   English   中英

如何使用mysql库在Node.js中创建存储过程?

[英]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";
  1. 以编程方式运行SQL时,无需使用DELIMITER 仅当使用mysql客户端手动或从脚本文件执行SQL语句流时,才需要DELIMITER。 一次运行一个查询时,您不必解决有关是否;任何歧义; 过程定义内部是语句的结尾。

  2. 您最好从查询中检查错误状态,但是您也应该养成检查错误类型和错误消息的习惯。 这将帮助您解决多种类型的问题,而无需发布到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM