【问题标题】:MySQL: Can stored procedure information be extracted from the information schema?MySQL:可以从信息模式中提取存储过程信息吗?
【发布时间】:2021-07-12 16:06:51
【问题描述】:

是否可以从 MySQL 中的信息架构中检索存储过程信息,如 nameparameter nane/position/type 或以其他方式?

【问题讨论】:

    标签: mysql stored-procedures schema


    【解决方案1】:

    您可以从INFORMATION_SCHEMA.ROUTINES 获得很多信息,包括名称。 See the MySQL Manual for details.

    参数信息将包含在INFORMATION_SCHEMA.PARAMETERS 表中,但该表在 MySQL 中不可用,因此我不确定您是否可以从INFORMATION_SCHEMA 获取该信息。

    如果您只需要参数列表,您可以从INFORMATION_SCHEMA.ROUTINES 中选择过程名称,然后使用SHOW CREATE PROCEDURE 为每个过程获取CREATE PROCEDURE 语句。如果您只需要参数和类型,您应该能够轻松解析它们。

    【讨论】:

    • INFORMATION_SCHEMA.PARAMETERS 似乎不存在..?
    • 不。它在 MySQL 6 中,但从未向后移植到 MySQL 5。
    • grrrr 所以没办法从数据库生成存储过程类?
    • 你可以使用SHOW CREATE PROCEDURE (dev.mysql.com/doc/refman/5.0/en/show-create-procedure.html) 自己解析...如果你只是解析参数列表,那不会太难。
    【解决方案2】:

    我相信使用 MySQL 的内置备份程序 mysqldump 可以实现您正在寻找的东西。试试这个:

    mysqldump --routines --triggers --nodata --skip-opt YOURDB
    

    详细信息:快速查看documentation (MySQL 5.4) 表明您肯定希望使用--routines 选项运行它,可能还有--triggers。我猜你会想要跳过这个转储中的大部分数据,只是为了查看程序,在这种情况下,你可能需要选项 --nodata --skip-opt 以及可能我尚未确定的其他一些选项。查看您的版本的文档,了解您想要的任何其他选项。另请注意,您可以通过在末尾添加名称来指定数据库中的一些表。

    【讨论】:

    • 感谢您的思考,我认为 James 的解决方案就足够了,但我一定会调查的!
    【解决方案3】:

    试试这个

    
    SELECT ORDINAL_POSITION, PARAMETER_MODE, PARAMETER_NAME, DTD_IDENTIFIER
    FROM information_schema.parameters
    WHERE specific_name = routine_name;
    

    这将列出例行输入/输出参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多