【问题标题】:rows object returned after executing stored procedure in node-mysql在 node-mysql 中执行存储过程后返回的行对象
【发布时间】:2015-05-31 19:03:45
【问题描述】:

我有一个子查询正在执行并且正在寻找 insertId,但我得到了一个没有任何信息的行对象。

我的存储过程

CREATE PROCEDURE `day`(IN start DATE, IN end DATE, IN event_id INT)
BEGIN
    WHILE start <= end DO
        INSERT INTO day(date, event_id) VALUES(start, event_id);
        SET start = start + 1;
    END WHILE;
END

Node.js

var query = "SET @start = '" + request.body.from  + "'; \
    SET @end = '" + request.body.to + "'; \
    SET @event_id = " + rows.insertId + "; \
    CALL day(@start, @end, @event_id);";

connection.query(query, [], function(error, rows, fields) {
    console.log(rows);
}

rows 的控制台输出

[
    {
      "fieldCount": 0,
      "affectedRows": 0,
      "insertId": 0,
      "serverStatus": 11,
      "warningCount": 0,
      "message": "",
      "protocol41": true,
      "changedRows": 0
    },
    {
      "fieldCount": 0,
      "affectedRows": 0,
      "insertId": 0,
      "serverStatus": 11,
      "warningCount": 0,
      "message": "",
      "protocol41": true,
      "changedRows": 0
    },
    {
      "fieldCount": 0,
      "affectedRows": 0,
      "insertId": 0,
      "serverStatus": 11,
      "warningCount": 0,
      "message": "",
      "protocol41": true,
      "changedRows": 0
    },
    {
      "fieldCount": 0,
      "affectedRows": 1,
      "insertId": 0,
      "serverStatus": 3,
      "warningCount": 0,
      "message": "",
      "protocol41": true,
      "changedRows": 0
    }
  ]

期望和问题

由于存储过程的插入,我需要某种实际信息。

【问题讨论】:

    标签: mysql sql node.js stored-procedures


    【解决方案1】:

    该存储过程实际上是否返回任何内容?我的存储过程将定义一个变量以与 returning 挂钩,如下所示:

    DECLARE
      the_id integer;
    BEGIN
      INSERT INTO the_table (first, last, address, zip)
      VALUES (first, last, address, zip)
      RETURNING _id INTO the_id;
    
    RETURN the_id;
    
    END;
    

    RETURN 实际上将 ID 发送到输出。

    免责声明:我使用 PostgreSQL 并在 plpsql 中编写函数,但我相信语法是相似的。

    【讨论】:

    • 谢谢乔尔,但它会返回多个值吗,我的存储过程是一个循环,根据开始和结束日期插入记录数
    • 否 - 只会返回一个值。我相信您可以将查询包装在return() 中,或者简单地将AS 放在BEGIN 之前。您可能还想查看 REF CURSOR 类型,但我并不精通该语法。
    猜你喜欢
    • 2022-01-16
    • 2018-08-13
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2020-01-14
    • 2012-10-24
    相关资源
    最近更新 更多