checksum tableをストアドプロシージャにしてみた。
checksum tableのテーブル名を決め打ちではなく、融通を効かせるようにしたいなーという構想から、information_schemaから該当するスキーマから存在するテーブル名を引用してchecksum tableを実行する、というストアドプロシージャを作成(未完)した。
以下、所感。
- 理想は結果をテーブルに格納して比較しやすいようにすることだったけど、無理ポ。
- 現在はスキーマ名は決め打ち(tpcc)だけど、そのうち引数でスキーマ名を可変にするつもり。
- 動的なSQL文の作り方を覚えられてよかった。
- Thread stack overrun:が出力された場合は、thread_stackを増やそう。
- 初めてのストアドプロシージャ作成にしては、まぁいいんじゃないかな(笑)
create procedure chksum() BEGIN DECLARE tbl_name char (10); DECLARE tblCur cursor for SELECT table_name FROM information_schema.tables WHERE table_schema = 'tpcc'; SET @pos = 0; SELECT COUNT(*) INTO @total FROM information_schema.tables WHERE table_schema = 'tpcc'; open tblCur; WHILE @total > @pos DO FETCH tblCur INTO tbl_name; SET @str = CONCAT('checksum table tpcc','.',tbl_name); PREPARE stmt FROM @str; EXECUTE stmt; SET @pos = @pos + 1; END WHILE; CLOSE tblCur; END
参考
SQL 基本のき CONCAT・EXECUTEで動的なSQL文の実行 MYSQL編