我正在使用8.0.15 MySQL,上面有几个存储过程。 “主”会调用其他程序,每个过程可能会(也可能不会)自己调用其他过程
我的目标是拥有一棵“过程树”,以记录它们被调用的顺序。
有关如何操作的任何想法?我当时想查询information_schema。ROUTINES
表,只提取带有正则表达式的各种Call,以仅拥有过程的“骨骼”,例如:
MAIN_PROCEDURE
CALL PCD2();
CALL PCD3();
END;
PCD2
CALL PCD4();
END;
然后,递归执行此操作,以便知道PCD2内部调用了PCD4。
我停留在第一部分,那么递归查询应该很简单
有帮助吗?当然,任何其他方法都可以!
预先感谢
答案 0 :(得分:0)
想知道是否存在一种自动方法来处理不平衡数据。假设这是一个二进制分类问题,我想使用交叉验证,例如kfolds。 您是否知道是否有任何交叉验证技术不仅可以随机地随机整理数据,还可以尝试“均衡”训练集中的标签,使其为50%-50%? 仅仅因为模型具有更高的更改以从特定类中学习更多点,这将不会获得较高的准确度得分。
答案 1 :(得分:0)
尝试此代码。将您的数据库名称放在“ MyDataBase”中。
CREATE DEFINER = root
@ localhost
程序dependencias
()
没有SQL;
BLOCK1:开始
DECLARE bas, c1 VARCHAR(50);
DECLARE fin int DEFAULT FALSE;
DECLARE cur1 CURSOR FOR SELECT specific_name from information_schema.routines where routine_schema= bas;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin = TRUE;
SET bas='MyDataBase';
DROP TABLE IF EXISTS dependencias;
CREATE TABLE dependencias (a varchar(50), b varchar(50));
OPEN cur1;
rulo1: LOOP
FETCH cur1 INTO c1;
IF fin THEN
LEAVE rulo1;
END IF;
BLOCK2: BEGIN
DECLARE can int;
DECLARE c2,cad varchar(50);
DECLARE fin int DEFAULT FALSE;
DECLARE cur2 CURSOR FOR SELECT specific_name from information_schema.routines where routine_schema= bas;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin = TRUE;
OPEN cur2;
rulo2: LOOP
FETCH cur2 INTO c2;
IF fin THEN
LEAVE rulo2;
END IF;
SET cad=CONCAT ('%',c2,'(%');
SET can=(SELECT COUNT(*) FROM information_schema.routines WHERE Routine_Name = c1 AND routines.routine_definition LIKE cad AND Routine_Schema = bas);
IF c1!=c2 AND can>0 THEN
INSERT INTO `dependencias` values (c1,c2);
END IF;
END LOOP rulo2;
CLOSE cur2;
END BLOCK2;
END LOOP rulo1;
CLOSE cur1;
END BLOCK1