使用
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.