MYSQL Функция / Процедуры - PullRequest
2 голосов
/ 27 января 2020

Мне нужно написать функцию, которая будет возвращать общее количество записей из таблицы, в которую будет вводиться имя таблицы.

drop function if exists totalRecord;

delimiter //
create function totalRecord(tname varachar(20))
      returns int
     begin
        declare result int;
        select count(*) into result from tname;
        return result;
    end;
//
delimiter ;

После запуска программы вывод пустой набор результатов, но таблица содержит записи.

1 Ответ

1 голос
/ 27 января 2020

Вы должны использовать Dynami c SQL здесь, потому что SQL не знает имя таблицы, которую вы передаете, и функции не позволяют Dynami c sql в Mysql. Таким образом, вам, вероятно, нужно ниже -

drop procedure if exists totalRecord;

delimiter //
create procedure totalRecord(tname varchar(20))
     begin
        declare result int;
        declare v_Sql VARCHAR(2000);
        SET v_Tab_Name=tname;
        SET v_Sql = concat(' Select count(1) from ' , v_Tab_Name);
        PREPARE stmt FROM v_Sql;
        EXECUTE stmt ;
        DEALLOCATE PREPARE stmt;
    end;
//
delimiter ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...