NodeJS中的存储过程输出

时间:2020-07-09 15:31:21

标签: mysql node.js

有人可以告诉我这段代码有什么问题吗?我在选择category_ID附近收到语法错误; 我正在使用最新版本的nodejs中是mysql

注意-如果我删除了输出参数,则输入代码正常工作。

节点服务器代码-

app.post('/api/createcategory', function (req, res) {
     name = req.body.categoryName, icon = req.body.categoryIcon;
     let createcategory = `CALL spAddCategory(?, ?, @category_id); SELECT @category_id;`
     db.query(createcategory, [name, icon], (err, result) => {
          if(err) {throw err};
          console.log(result);

     })
     res.send('Category Created')
})

SQL查询-

CREATE PROCEDURE spAddCategory ( IN category_name varchar(255), IN category_icon varchar(255), OUT category_id int )
     BEGIN
          INSERT INTO categories ( categoryName, categoryIcon ) 
          VALUES ( category_name, category_icon );

          SELECT categoryID INTO category_id FROM categories
          WHERE categoryName = category_name;
     END 

1 个答案:

答案 0 :(得分:1)

考虑代替将输出作为普通结果集来处理OUT变量(主要在过程之间有用),

app.post('/api/createcategory', function (req, res) {
     name = req.body.categoryName, icon = req.body.categoryIcon;
     let createcategory = `CALL spAddCategory(?, ?);`
     db.query(createcategory, [name, icon], (err, result) => {
          if(err) {throw err};
          console.log(result[0]);

     })
     res.send('Category Created')
})

然后该过程返回包含最后插入的id的结果集(假设categoryIDAUTO_INCREMENT id):

CREATE PROCEDURE spAddCategory (
category_name varchar(255),
category_icon varchar(255)
)
BEGIN

INSERT INTO categories ( categoryName, categoryIcon ) 
VALUES ( category_name, category_icon );

SELECT last_insert_id();

END 

请注意,您最终可能会获得多个同名类别。