Вызов хранимой процедуры из nodejs возвращает ошибку - PullRequest
0 голосов
/ 28 июня 2018

Я изучаю NodeJS с помощью expressjs и пока, все хорошо, но у меня есть небольшая проблема: при вызове хранимой процедуры из Workbench все работает нормально, но одно и то же предложение (копирование / вставка) в выражении показывает ошибку из движка MySQL.

{
    "desc_status": {
        "code": "ER_BAD_NULL_ERROR",
        "errno": 1048,
        "sqlMessage": "Column 'id_color' cannot be null",
        "sqlState": "23000",
        "index": 0,
        "sql": "CALL pinturas.add_inventory('101', '3');"
    },
    "code_status": 409
}

Вот мой звонок на NodeJS:

let sql = "CALL pinturas.add_inventory(101, 3);";
conn.query(sql, true, (err, filas) => {
    if(err){
        //next(err);
        res.status(409).json({
            desc_status: err,
            code_status: 409,
        });
        return;
    }
    (...)
});

звонок из верстака

CALL `pinturas`.`add_inventory`('101', '3');

и, наконец, хранимая процедура:

CREATE DEFINER=`root`@`localhost` PROCEDURE `add_inventory`(
    IN _id_color INT(11), 
    IN _cant INT(11)
)
BEGIN
    set @numRows = (select count(*) from stock_colores where id_pintura = 1 and id_color = @_id_color);
    if @numRows > 0 then
        set @oldCant = (select cant from stock_colores where id_pintura = 1 and id_color = @_id_color);
        set @_stock_id = (select stock_id from stock_colores where id_pintura = 1 and id_color = @_id_color);
        update stock_colores set cant = (_cant + @oldCant) where stock_id = @_stock_id;
    else
        insert into stock_colores (id_pintura, id_color, cant) values (1, @_id_color, _cant);
    end if;
END

Я ценю любое руководство. Приветствия.

1 Ответ

0 голосов
/ 04 июля 2018

Итак, ребята, после нескольких проверок и попыток мне удалось решить мою проблему, которая на самом деле была довольно простой и целиком и полностью в моем скрипте хранимой процедуры. Я вызывал параметры с помощью @, но на самом деле это переменные, объявленные в коде, а не входные параметры.

Вот мой обновленный код.

CREATE DEFINER=`root`@`localhost` PROCEDURE `add_inventory`(
    IN _id_pintura INT(2), 
    IN _id_color INT(2), 
    IN _cant INT(2)
)
BEGIN
    set @numRows = (select count(*) from stock_colores where id_pintura = _id_pintura and id_color = _id_color);
    if @numRows > 0 then
        set @oldCant = (select cant from stock_colores where id_pintura = _id_pintura and id_color = _id_color);
        set @_stock_id = (select stock_id from stock_colores where id_pintura = _id_pintura and id_color = _id_color);
        update stock_colores set cant = (_cant + @oldCant) where stock_id = @_stock_id;
    else
        insert into stock_colores (id_pintura, id_color, cant) values (_id_pintura, _id_color, _cant);
    end if;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...