testEndHandle が存在する場合はプロシージャを削除します。
DELIMITER $$
CREATE PROCEDURE testEndHandle()
BEGIN
DECLARE s_tablename VARCHAR(100);
/* 表示されるテーブルのデータベース内のすべてのテーブル
SELECT table_name FROM information_schema.tables WHERE table_schema='databasename' table_name で並べ替えます。
*/
#表示すべて
DECLARE cur_table_struct CURSOR
FOR
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'ym_wms' AND table_type = 'BASE TABLE'
AND table_schema = DATABASE () AND table_name NOT IN (
SELECT t.table_name FROM (
SELECT table_name,column_name FROM information_schema.columns
WHERE table_name IN (
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'ym_wms'
AND table_type = 'BASE TABLE'
AND table_schema = DATABASE ()
)
) t WHERE t.column_name='tenant_id'
);
SQLSTATE '02000' の CONTINUE ハンドラーを宣言 SET s_tablename = NULL;
cur_table_struct を開く;
cur_table_struction INTO s_tablename; をフェッチします。
WHILE ( s_tablename IS NOT NULL) DO
SET @MyQuery=CONCAT("alter table `",s_tablename, "` ADD COLUMN `tenant_id` VARCHAR(32) COMMENT '租户ID'");
@MyQuery から msql を準備します。
msql ;#USING @c; を実行します。
cur_table_struction INTO s_tablename; をフェッチします。
途中で終了。
CLOSE cur_table_struct;
終わり;
$$
CALL testEndHandle();