Node.js+MySQL呼叫儲存過程

2019-10-18 00:54:44

在本教學中,您將學習如何從Node.js應用程式中呼叫MySQL中的儲存過程。

呼叫儲存過程的步驟與執行查詢的步驟類似,如下所示:

  1. 連線到MySQL資料庫伺服器,請參考:/25/13447.html
  2. 通過執行CALL spName語句來呼叫儲存過程。spName是儲存過程的名稱。
  3. 關閉資料庫連線。

呼叫MySQL儲存過程範例

為了演示,我們建立一個新的儲存過程filterTodo,以根據completed欄位的值來查詢todos表中的行。

use todoapp;

DELIMITER $$

CREATE PROCEDURE `filterTodo`(IN done BOOLEAN)
BEGIN
    SELECT * FROM todos WHERE completed = done;
END$$

DELIMITER ;

儲存過程filterTodo根據done引數返回todos表中的行。 如果done引數為true,則返回所有已完成的todos,否則返回未完成的todos

在MySQL中呼叫一個儲存過程,可以使用CALL語句。 例如,要呼叫filterTodo儲存過程,請執行以下語句:

CALL filterTodo(true);

該語句返回以下結果集:

mysql> CALL filterTodo(true);
+----+-----------------------------------------------+-----------+
| id | title                                         | completed |
+----+-----------------------------------------------+-----------+
|  4 | It should work perfectly                      |         1 |
|  6 | 現在學習一次插入多行記錄(by www.tw511.com) |         1 |
|  7 | It should work perfectly                      |         1 |
+----+-----------------------------------------------+-----------+
3 rows in set

Query OK, 0 rows affected

以下storedproc.js程式呼叫filterTodo儲存過程並返回結果集:

let mysql = require('mysql');
let config = require('./config.js');

let connection = mysql.createConnection(config);

let sql = `CALL filterTodo(?)`;

connection.query(sql, true, (error, results, fields) => {
  if (error) {
    return console.error(error.message);
  }
  console.log(results[0]);
});

connection.end();

請注意,該程式使用儲存資料庫資訊的config.js模組:

let config = {
  host    : 'localhost',
  user    : 'root',
  password: '123456',
  database: 'todoapp'
};

module.exports = config;

CALL語句中,我們使用預留位置(?)將資料傳遞給儲存過程。

當我們在連線物件上呼叫query()方法時,我們將done引數的值作為query()方法的第二個引數傳遞。

下面,我們來執行storedproc.js程式,如下所示 -

F:\worksp\mysql\nodejs\nodejs-connect>node storedproc.js
openssl config failed: error:02001003:system library:fopen:No such process
[ RowDataPacket { id: 4, title: 'It should work perfectly', completed: 1 },
  RowDataPacket { id: 6, title: '現在學習一次插入多行記錄(by www.tw511.com)', completed: 1 },
  RowDataPacket { id: 7, title: 'It should work perfectly', completed: 1 } ]

程式按預期顯示3行。

在本教學中,您已經學習了如何從Node.js程式中呼叫MySQL中的儲存過程。