如何列出mysql存储过程参数

时间:2012-03-03 13:09:35

标签: mysql stored-procedures

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

3 个答案:

答案 0 :(得分:12)

更新版本的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函数至少可以整理它。

答案 1 :(得分:1)

show create procedure show create function?这些入站呼叫需要 访问您必须查看的mysql.proc表 那里的body字段属于longblob类型 select cast(param_list as char) from mysql.proc where name='' and type='PROCEDURE'

答案 2 :(得分:0)

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

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;