冒険の書

27歳と6ヶ月のときに未経験でITエンジニアに転職した元派遣会社営業職(文系)が綴るブログです。同じように20代後半から未経験でIT技術者に転職することを検討されている人に「27歳からの未経験がどれだけ成長できるか」という点などで参考になれば幸いです。

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編