在本教學中,您將學習如何從Node.js應用程式中呼叫MySQL中的儲存過程。
呼叫儲存過程的步驟與執行查詢的步驟類似,如下所示:
CALL spName
語句來呼叫儲存過程。spName
是儲存過程的名稱。為了演示,我們建立一個新的儲存過程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中的儲存過程。