以下のスニペットはほとんどの場合に機能するはずですが、十分に単純になることを期待して作業を開始しました。しかし、対処すべき多くの問題と例外があります。
SHOW CREATE / MySQLDumpを使用する方がまだ良い解決策だと思います(変数への応答の読み取りは許可されていませんが)。
SELECT
CONCAT_WS(' ',
'DELIMITER $$\n',
'CREATE ',
CONCAT_WS('=',r.SECURITY_TYPE,CONCAT_WS('@',CONCAT('`',SUBSTRING_INDEX(r.`definer`,'@',1),'`'),CONCAT('`',SUBSTRING_INDEX(r.`definer`,'@',-1),'`'))),
'\n',
r.ROUTINE_TYPE,
CONCAT_WS('.', ROUTINE_SCHEMA, ROUTINE_NAME),
CONCAT('(',GROUP_CONCAT(CONCAT_WS(' ', p.PARAMETER_NAME, p.DTD_IDENTIFIER)),')'),
IF(o_p.DTD_IDENTIFIER is not null,CONCAT('RETURNS ',o_p.DTD_IDENTIFIER),''),
ROUTINE_DEFINITION,
'$$') stmt_
FROM information_schema.routines r LEFT JOIN information_schema.parameters p ON p.SPECIFIC_SCHEMA = r.routine_schema AND p.specific_name = r.routine_name AND p.PARAMETER_MODE ='IN' LEFT JOIN information_schema.parameters o_p ON o_p.SPECIFIC_SCHEMA = r.routine o_p.specific_name = r.routine_name AND o_p.PARAMETER_MODE IS NULL WHERE ROUTINE_SCHEMA IN('_secured'、'tester')GROUP BY CONCAT_WS('。'、ROUTINE_SCHEMA、ROUTINE_NAME)