从一个表中触发多个选择,然后使用节点红色的dashdb-in和dashdb-out模块将结果插入目标表

问题描述

我试图实现使用node-red从DB2表读取并插入到另一个DB2表中。为此,我正在使用dashdb模块(https://flows.nodered.org/node/node-red-nodes-cf-sqldb-dashdb)。我已确保源和目标中的列均匹配,并通过使用select query from source_table中的select *来测试是否在目标表中插入多条记录,然后针对插入表进行插入查询。 现在我还有另一件事,我需要在源表上触发多个选择查询,并将结果记录异步插入目标表中。 除了id =?之外,所有多个选择查询都将相同。 。所以我试图将查询放在msg.payload中,像这样的for循环

var queryID = 2; // max number of id to be querying against
            for (i=1; i<=queryID; i++) { 
                console.log("COUNT",i)
                msg.payload = `select * from source_table where id= ${i}` // only i changes
                node.send(msg); // i pass it to next node which is dashBD out node responsible for selecting record from source table
            } 

但是这样做只会执行最后一个循环值2,而不执行结点操作。将i = 1的值发送到下一个结点。

有人可以在这里阐明一下吗:它将id = 2的结果两次插入目标表。相反,我想根据for循环i变量执行插入。这是图中的第二个节点模块功能

module.exports = function(RED) {
function fireMultipleQuery(nodeConfig) {
    RED.nodes.createNode(this,nodeConfig);
    var node = this;
    node.on('input',function(msg) {
        var queryID = 2; // max number of id to be querying against
        for (i=1; i<=queryID; i++) { 
            console.log("COUNT",i)
            msg.payload = `select * from source_table where id= ${i}` // only i changes
            node.send(msg); // i pass it to next node which is dashBD out node responsible for selecting record from source table
        });

     }
    RED.nodes.registerType("fire-query-node",fireMultipleQuery);
}

这是我的流程

enter image description here

解决方法

NodeJS是参考语言传递。

因此,由于循环正在更新同一Example : let cartNumber = [{...},{...}] { cartNumber !== undefined && cartNumber.length < 3 ? cartNumber.map((item) => { return ( <li className="clearfix"> <img src={item.imgSrc} style={{ width: "30%" }} alt="item1" /> <span className="item-name" style={{ verticalAlign: "middle" }}> {item.name} </span> <span className="item-price" style={{ verticalAlign: "middle" }}> {item.price} kr </span> <span className="item-quantity" style={{ verticalAlign: "middle" }}> Quantity: {item.quantity} </span> </li> ); }) : null; } 对象,因此它也在更改已发送的版本。

您可能希望克隆msg或为每次发送创建一个新对象。

您可以使用msg

克隆邮件