delete from hateblo.jp where 1=1;

タイトルに意味はありません。

ストアドプロシージャではまる

やりたかったこと

カーソルで1行ずつ、正規化を行い、最終的にテーブルの情報をまとめたかった。

内容

カーソルでFETCHしたら、値がなぜかNULLになってしまう現象が発生。
ログ取得用のテーブルにログを吐き出し、確認すると、すべてのカラムがNULL。
(もちろん、CAST(col AS CHAR)をして吐き出している)

原因を切り分けると、DECLAREで宣言したものが多く、
なんらかの原因*1でFETCHすることが出来なくなって、
発生している模様。

テーブルの内容としては、12カラム程度で、
ほとんどがVARCHAR、変換用にいくつかの変数を追加で20程度使っていたら、
この現象に遭遇。

回避策

一時テーブルを作成して、データを突っ込んだ後、
ALTER TABLEで加工する情報を盛り込んでから正規化する。
取り扱うテーブルが増えると必然的に変数も増えるため、列を動的に増やして、作業を行うようにする。

*1:おそらくメモリ不足