使用mysql存储过程-统计某个数据库下的所有表的记录数
其中用到了游标(cursor),循环(loop),动态SQL预处理(prepare)等技术,特此记录一下。
[sql] view plain copy
1. CREATE PROCEDURE statis_rows(in v_schema varchar(50))
2. BEGIN
3.
4.
5. DECLARE sql_str VARCHAR (200);
6. declare no_more_departments integer DEFAULT 0;
7.
8.
9. DECLARE sql_cur CURSOR FOR (
10. SELECT
11. CONCAT(
12. 'select ',"'",table_schema,"'",",'",table_name,"',",'count(1)',' into @v_tab_schema,@v_tab_name,@v_count from ',
13. TABLE_SCHEMA,
14. '.',
15. TABLE_NAME,
16. ''
17. )
18. FROM
19. information_schema.TABLES
20. WHERE table_schema = v_schema
21. and table_name <> 'table_rows'
22. );
23. DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
24.
25.
26. /* 打开游标,进入循环统计各表的记录 */
27. OPEN sql_cur;
28. myLoop:LOOP
29. fetch sql_cur into sql_str;
30.
31.
32. if no_more_departments = 1 THEN
33. leave myLoop;
34. end if;
35.
36.
37. set @v_sql=sql_str;
38. prepare stmt from @v_sql;
39.
40.
41.
42.
43. EXECUTE stmt;
44.
45.
46. /* 将统计结果保存到表中,以便随时都可以查看 */
47. INSERT INTO table_rows
mysql存储过程使用48. VALUES
49. (
50. @v_tab_schema,
51. @v_tab_name,
52. @v_count,
53. sysdate()
54. );
55.
56.
57. DEALLOCATE prepare stmt;
58. end loop myLoop;
59.
60.
61. close sql_cur;
62. END
最后测试一下
call statis_rows('mysql');
call statis_rows('scott');
select * from table_rows;
call statis_rows('scott');
select * from table_rows;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论