【问题标题】:How to list mysql stored procedure parameters如何列出mysql存储过程参数
【发布时间】:2012-03-21 17:28:56
【问题描述】:

列出 MySQL 存储过程参数的 SQL 是什么? information_schema.routines 表包含存储过程名称,但似乎没有存储参数的标准位置。

【问题讨论】:

  • stackoverflow.com/questions/733349/…。不确定是否可以在没有正文的情况下隔离参数
  • 您使用的是哪个版本?较新的版本有 information_schema.parameters。在旧版本中,查看 mysql.proc - 列参数列表(尽管它们的格式不是很好!)
  • @dash 砰,不知道我怎么错过了那张桌子。我正在使用 5.5.9。如果您将其作为答案,我会接受。

标签: mysql stored-procedures


【解决方案1】:

最新版本的 MySQL (5.5.3 and above) 引入了 information_schema.parameters 对象,它应该为您提供所需的信息;

SELECT * 
FROM information_schema.parameters 
WHERE SPECIFIC_NAME = 'your_procedure';

早期版本的 MySql 依赖于对 mysql.proc 表的访问; 'param_list' 列包含您感兴趣的名称的过程的所有参数信息。但是,这些信息显然是非规范化的,因为它存储为逗号分隔的字符串:

SELECT param_list FROM mysql.proc WHERE db='your_database' AND name='your_procedure';

给予:

IN param1 VARCHAR(32), IN param2 int, ... 

这需要更多的工作才能放入演示格式;虽然 string.split 函数至少会整理它。

【讨论】:

    【解决方案2】:

    show create procedureshow create function?这些呼入电话需要 访问mysql.proc 表,这是您必须查看的地方 body 字段是 longblob 类型 select cast(param_list as char) from mysql.proc where name='' and type='PROCEDURE'

    【讨论】:

      【解决方案3】:

      我编写了一个返回表中参数列表的过程。它可能对某人有用。

      CREATE PROCEDURE Micropsitta.'getParams'(parname varchar(255)) 
          BEGIN
          set @wyraz=(select cast(param_list as char)
          from mysql.proc 
          where type='PROCEDURE'  
          and name COLLATE utf8_polish_ci = parname COLLATE utf8_polish_ci);
          drop TEMPORARY table if exists tab;
          CREATE TEMPORARY TABLE tab (substrings varchar(255)) ENGINE=MEMORY;
          IF ((@wyraz) <> '')
           THEN
           set @firstchar=1;
           set @spacje=1;
           set @lenghtWyraz=(select CHAR_LENGTH(@wyraz));
           set @lenght=1;
           while @lenght < @lenghtWyraz
           DO
            set @lenght=(select CHAR_LENGTH(SUBSTRING_INDEX(@wyraz,' ',@spacje)));
            set @sub=(select SUBSTRING(@wyraz,@firstchar,@lenght-@firstchar+1));
            set @firstchar=(select CHAR_LENGTH(SUBSTRING_INDEX(@wyraz,',',@spacje)))+2;
            insert into tab (substrings)
            select @sub;
            set @spacje=@spacje+1;
           end while;
          END IF;
          select substrings as params from tab where substrings <>'';
          END;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-21
        • 2015-08-16
        相关资源
        最近更新 更多