[英]How to execute a stored statement in a stored procedure
我正在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');
時,這會產生錯誤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.