
MySQL では、テーブルからの列名の抽出はデータベース操作タスクの一般的な要件です。プログラムで列名をループし、その値に基づいて操作を実行するには、ストアド プロシージャを使用できます。
SHOW COLUMNS FROM myTable ステートメントは、名前を含む列のメタデータを取得します。ただし、ストアド プロシージャでこれらの名前を反復処理するには、カーソルとループ構造が必要です。
カーソルとループの実装
カーソルは、次のことを可能にするツールです。一連のレコードを順次反復します。この場合、カーソル Col_names を使用して INFORMATION_SCHEMA.COLUMNS テーブルから列名をフェッチします。 OPEN ステートメントはカーソルを初期化し、FETCH はカーソルを次の行に進め、フェッチされた値を指定された変数に割り当てます。
DECLARE col_names CURSOR FOR SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_name' ORDER BY ordinal_position;
ループを実行するには、カウンター変数 i が初期化され、カウンター変数 i が初期化され、ループをいつ終了するかを決定するために FOUND_ROWS() によって返される行数。ループ内で、FETCH ステートメントは次の列名を取得し、それをcol_name 変数に割り当てます。カラム名に対して実行する操作をここに挿入できます。
SET i = 1;
the_loop: LOOP
IF i > num_rows THEN
CLOSE col_names;
LEAVE the_loop;
END IF;
FETCH col_names
INTO col_name;
//do whatever else you need to do with the col name
SET i = i + 1;
END LOOP the_loop;実践例
このアプローチを利用することで、カラム名に動的にアクセスすることが可能になりますそしてストアド プロシージャで操作を実行します。次の例を考えてみましょう。
CREATE PROCEDURE get_cols()
BEGIN
DECLARE col_names CURSOR FOR
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'my_table'
ORDER BY ordinal_position;
DECLARE done INT DEFAULT FALSE;
DECLARE col_name VARCHAR(255);
OPEN col_names;
main_loop: LOOP
FETCH col_names INTO col_name;
IF done THEN
LEAVE main_loop;
END IF;
-- Perform operations on col_name
END LOOP main_loop;
CLOSE col_names;
END;このプロシージャでは、列名が my_table テーブルから取得されます。 Done フラグは、使用可能な列名がなくなった場合のループの終了を制御します。カスタム操作を main_loop 内に追加して、列名に基づいて特定のタスクを実行できます。
以上がストアド プロシージャ内の MySQL 列名を動的に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。