下面的 sn-p 应该适用于大多数情况,我开始研究它希望它足够简单。
但是有很多问题需要解决,也有例外。
我想使用 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_
来自
information_schema.routines r
左连接
information_schema.parameters p ON p.SPECIFIC_SCHEMA = r.routine_schema
AND p.specific_name = r.routine_name
和 p.PARAMETER_MODE = 'IN'
左连接
information_schema.parameters o_p ON o_p.SPECIFIC_SCHEMA = r.routine_schema
AND o_p.specific_name = r.routine_name
AND o_p.PARAMETER_MODE 为 NULL
在哪里
ROUTINE_SCHEMA IN ('_secured' , 'tester')
GROUP BY CONCAT_WS('.', ROUTINE_SCHEMA, ROUTINE_NAME)