POCをやっています。MySQL で 1 つのストアド プロシージャを作成しました。新しいテーブルの作成、ストアド プロシージャ、クエリの実行などのデータベース操作に MySQLWorkbench を使用しています。
ここにポイントがあります。
アプローチ 1 -
最初のアプローチでは、一時テーブルを作成し、選択した列で INSERT INTO ...SELECT ステートメントを使用してレコードを追加しています。
CREATE TEMPORARY TABLE XYZ(....);
INSERT INTO XYZ (....) SELECT (....) FROM ABC WHERE clause;
これを行った後、一時テーブルのいくつかの列でのみ null 値を取得し、他のすべての一時テーブルの列には正しい値が入力されます。
別の SQL タブで同じ select ステートメントを (同じ where 句に対して) 実行すると、一時テーブルで null 値を取得するいくつかの列に対しても正しい出力が表示されます。
上記の INSERT INTO..SELECT ステートメントを * (すべての列) で変更すると、一時テーブルに正しい出力が得られます。
INSERT INTO XYZ SELECT * FROM ABC WHERE clause;
しかし、すべての列は必要ありません。ENGINE = value で一時テーブルも作成してみました。しかし、うまくいきませんでした。私も通常のテーブル(TEMPORARYなし)でこのアプローチをすべて試しましたが、残念ながら
アプローチ 2 -
2 番目のアプローチでは、一時テーブルの代わりにカーソルを使用して同じストアド プロシージャを変更しました。ただし、この場合でも、カーソルはレコードを取得していません。
DECLARE cur1 CURSOR FOR SELECT (....) FROM ABC WHERE clause;
別の SQL タブで同じ select ステートメントを (同じ where 句に対して) 実行すると、正しい出力が表示されます。
私は何か間違ったことをしていますか?これについて何か提案はありますか?
前もって感謝します。