Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在存储过程中执行存储语句_Mysql_Stored Procedures - Fatal编程技术网

Mysql 如何在存储过程中执行存储语句

Mysql 如何在存储过程中执行存储语句,mysql,stored-procedures,Mysql,Stored Procedures,我正在mySQL中创建一个函数,每当任何表插入或删除某些内容时,该函数都会更新表度量。因此,我得到了我的Table\u metrics表,其中包含元素Table\u name和row\u count: CREATE TABLE Table_metrics ( table_name VARCHAR(64), row_count INTEGER DEFAULT 0 ); 因此,每当有东西被添加到数据库中我的任何表(除了这个表)中时,匹配的行就会被更新为该表

我正在mySQL中创建一个函数,每当任何表插入或删除某些内容时,该函数都会更新表度量。因此,我得到了我的
Table\u metrics
表,其中包含元素
Table\u name
row\u 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;
    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;
当我调用过程
calltable_update_metric(“所有者”)时,这会产生一个错误(所有者是数据库中的表)

我对存储过程做了一些深入研究,试图弄清楚它们是如何工作的。我假设问题来自“SELECT COUNT(*)from tablename)行,因此我尝试在过程中使用一个存储语句:

    CREATE PROCEDURE table_update_metric(IN tablename VARCHAR(64))
        UPDATE Table_metrics 
            SET row_count=(SELECT COUNT(*) FROM tablename) 
        WHERE table_name = 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还比较陌生,但我相信这是一条路要走


有人能对这个问题提供一些见解吗

Mysql中已经提供了您想要做的事情。信息架构表为您存储以下信息:)


根据Somonare所说,我在数据库中创建了一个表,使用这些信息:

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

每次更新传感器中的表时,该表都将使用触发器进行更新

表_行将为您提供表中行数的估计值,因此您的起点将不正确。如果需要实际数字,则需要使用tbl_name中的COUNT(*)。