我正在學習函數,過程和觸發器,我想做一個簡單的過程來計算表中的行參數。MySQL過程IN變量不能正常工作
create procedure countRows(IN v varchar(30))
SELECT COUNT(*) FROM v;
有人能告訴我爲什麼,如果我這樣做:
call countRows('sometable');
call countRows(sometable); //I tried both
它只是不工作
對不起,那新手的問題。
我正在學習函數,過程和觸發器,我想做一個簡單的過程來計算表中的行參數。MySQL過程IN變量不能正常工作
create procedure countRows(IN v varchar(30))
SELECT COUNT(*) FROM v;
有人能告訴我爲什麼,如果我這樣做:
call countRows('sometable');
call countRows(sometable); //I tried both
它只是不工作
對不起,那新手的問題。
您需要動態sql。
解返回作爲參數傳遞的任何表中的計數,以用上
DELIMITER $$
CREATE PROCEDURE `countRows`(IN v varchar(30))
BEGIN
SET @t1 =CONCAT("SELECT COUNT(*) FROM ",V);
PREPARE stmt3 FROM @t1;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
END$$
DELIMITER ;
執行
call countRows('sometable');
更新:溶液返回 「表X包含n個行(多個)」表格作爲參數傳遞給sp
DELIMITER $$
CREATE PROCEDURE `countRowsEx`(IN v VARCHAR(30))
BEGIN
-- SET @t1 =CONCAT("SELECT COUNT(*) FROM ",V);
SET @t1 =CONCAT('SET @totalRows=(SELECT COUNT(*) FROM ',v, ');');
PREPARE stmt3 FROM @t1;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;
SELECT CONCAT('Table ', v, ' contains ', @totalRows, ' row', IF(@totalRows>1, 's',''));
END$$
DELIMITER ;
執行
call countRowsEx('sometable');
試試這個:
call countRows('v');
你期望它做什麼?它如何失敗? – rghome