Как выполнить сохраненный оператор в хранимой процедуре - PullRequest
0 голосов
/ 30 января 2019

Я создаю функцию в mySQL, которая будет обновлять показатели таблицы каждый раз, когда в какую-либо таблицу вставляется или удаляется что-либо из нее.Итак, у меня есть таблица Table_metrics с элементами table_name и row_count:

    CREATE TABLE Table_metrics (
        table_name VARCHAR(64), 
        row_count INTEGER DEFAULT 0 );

Так что каждый раз, когда что-то добавляется в любую из моих таблиц (кроме этой) в базе данныхсоответствующая строка обновляется с количеством строк в этой таблице.

Для этого я попытался создать хранимую процедуру:

    CREATE PROCEDURE table_update_metric(IN tablename VARCHAR(64))
        UPDATE Table_metrics 
            SET row_count=(SELECT COUNT(*) FROM tablename) 
        WHERE table_name = tablename;

Это вызывает ошибку, когда я вызываю процедуру call table_update_metric('Owners'); (Владельцы являются таблицей в моей базе данных)

    table DB.tablename doesn't exist

Я немного покопался в хранимых процедурах, пытаясь выяснить, как они будут работать.Я предполагаю, что проблема исходит из строки `SELECT COUNT (*) FROM tablename), поэтому я попытался сохранить хранимую инструкцию в процедуре:

    CREATE PROCEDURE table_update_metric(IN TABLENAME VARCHAR(64))
        SET @s = CONCAT('SELECT COUNT(*) FROM ', tablename)
        UPDATE Table_metrics 
            SET row_count=EXECUTE @s 
        WHERE table_name = tablename;

Я не совсем уверен, как правильно сделатьсохраненный оператор, поскольку я все еще относительно новичок в MySQL, но я считаю, что это путь.

Может кто-нибудь предложить какое-либо понимание этой проблемы?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Исходя из того, что сказал Сомонаре, я создал таблицу в своей базе данных, которая использует эту информацию:

    CREATE TABLE Table_metrics 
        SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES 
        WHERE TABLE_SCHEMA = 'Sensors';

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

0 голосов
/ 30 января 2019

То, что вы пытаетесь сделать, уже предоставлено в Mysql.Таблицы информационной схемы хранят эту информацию для вас:)

 SELECT TABLE_NAME, TABLE_ROWS)
 FROM INFORMATION_SCHEMA.TABLES 
 WHERE TABLE_SCHEMA = '{your_db}';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...