Вложенный запрос хранимой функции Mysql (SELECT внутри запроса INSERT) - PullRequest
0 голосов
/ 08 октября 2019

Таблицы

create table category(id int primary key auto_increment, name varchar(30));
insert into category(name) values('Snacks'),('Soft Drink'),('Raw');

create table material(id int primary key auto_increment, name text, catID int references category(id), quantity float, unit text, price float, pur_date date);

create table mStock(name text, catID int, quantity int, unit text);

Сохраненная функция для добавления материала

CREATE DEFINER=`root`@`localhost` FUNCTION `addMaterial`( nm text, cat text, qty int, un text, pr float) RETURNS int(11)
    DETERMINISTIC
BEGIN

    declare cnt int;

    declare continue handler for 1062
    BEGIN
        return 0;
    END;

    insert into MATERIAL 
            ( name, catID, quantity, unit, price, pur_date) 
     values ( nm, ( select id from CATEGORY where lower(name) = lower(cat) ) , 
              qty, un, pr, curdate() );

    select count(*) into cnt from mSTOCK where lower(name) = lower(nm);

    if( cnt  > 0 )
    then
        update mSTOCK set quantity = quantity + qty where lower(name) = lower(nm);
    else
        insert into mSTOCK values( nm, ( select id from CATEGORY where lower(name) = lower(nm) ), qty, un );
    end if;

    RETURN 1;
END

Проверка добавления записей в таблицу

select * from material;

enter image description here

select * from mStock;

enter image description here

Добавлен ID категории в материалеТаблица, но она не добавлена ​​в таблицу mStock. Я также пытался использовать select в запросе, но он не работает.

1 Ответ

1 голос
/ 08 октября 2019

Заметив ваше условие where в другом случае:

where lower(name) = lower(nm) 

замените его на

where lower(name) = lower(cat) 
...