【发布时间】:2021-07-12 16:06:51
【问题描述】:
是否可以从 MySQL 中的信息架构中检索存储过程信息,如 name、parameter nane/position/type 或以其他方式?
【问题讨论】:
标签: mysql stored-procedures schema
是否可以从 MySQL 中的信息架构中检索存储过程信息,如 name、parameter nane/position/type 或以其他方式?
【问题讨论】:
标签: mysql stored-procedures schema
您可以从INFORMATION_SCHEMA.ROUTINES 获得很多信息,包括名称。 See the MySQL Manual for details.
参数信息将包含在INFORMATION_SCHEMA.PARAMETERS 表中,但该表在 MySQL 中不可用,因此我不确定您是否可以从INFORMATION_SCHEMA 获取该信息。
如果您只需要参数列表,您可以从INFORMATION_SCHEMA.ROUTINES 中选择过程名称,然后使用SHOW CREATE PROCEDURE 为每个过程获取CREATE PROCEDURE 语句。如果您只需要参数和类型,您应该能够轻松解析它们。
【讨论】:
SHOW CREATE PROCEDURE (dev.mysql.com/doc/refman/5.0/en/show-create-procedure.html) 自己解析...如果你只是解析参数列表,那不会太难。
我相信使用 MySQL 的内置备份程序 mysqldump 可以实现您正在寻找的东西。试试这个:
mysqldump --routines --triggers --nodata --skip-opt YOURDB
详细信息:快速查看documentation (MySQL 5.4) 表明您肯定希望使用--routines 选项运行它,可能还有--triggers。我猜你会想要跳过这个转储中的大部分数据,只是为了查看程序,在这种情况下,你可能需要选项 --nodata --skip-opt 以及可能我尚未确定的其他一些选项。查看您的版本的文档,了解您想要的任何其他选项。另请注意,您可以通过在末尾添加名称来指定数据库中的一些表。
【讨论】:
试试这个
SELECT ORDINAL_POSITION, PARAMETER_MODE, PARAMETER_NAME, DTD_IDENTIFIER
FROM information_schema.parameters
WHERE specific_name = routine_name;
这将列出例行输入/输出参数。
【讨论】: