testEndHandle이 존재하는 경우 삭제 절차;
DELIMITER $$
CREATE PROCEDURE testEndHandle()
BEGIN
DECLARE s_tablename VARCHAR(100);
/*显示表的数据库中的所有表
SELECT table_name FROM information_schema.tables WHERE table_schema='databasename' Order by table_name ;
*/
#显示所有
DECLARE cur_table_structure 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 테이블_이름 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'에 대한 계속 핸들러 선언 SET s_tablename = NULL;
OPEN cur_table_structure;
FETCH cur_table_structure INTO s_tablename;
WHILE ( s_tablename은 NULL이 아닙니다) DO
SET @MyQuery=CONCAT("alter table `",s_tablename, "` ADD COLUMN `tenant_id` VARCHAR(32) COMMENT '租户ID'");
@MyQuery에서 msql을 준비하세요.
msql 실행 ;#USING @c;
FETCH cur_table_structure INTO s_tablename;
종료하는 동안;
cur_table_structure 닫기;
끝;
$$
testEndHandle() 호출;