簡體   English   中英

如何在存儲過程中執行存儲語句

[英]How to execute a stored statement in a stored procedure

我正在mySQL中創建一個函數,該函數將在每次任何表插入或刪除表時更新表指標。 所以我有了Table_metrics表,其中包含table_namerow_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');時,這會產生錯誤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還是比較陌生,但是我相信這是要走的路。

誰能提供對此問題的任何見解?

Mysql中已經提供了您要嘗試執行的操作。 信息架構表為您存儲此信息:)

 SELECT TABLE_NAME, TABLE_ROWS)
 FROM INFORMATION_SCHEMA.TABLES 
 WHERE TABLE_SCHEMA = '{your_db}';

根據Somonare所說的,我在數據庫中創建了一個使用該信息的表:

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

每次更新Sensor中的表時,將使用觸發器更新該表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM