列出MySQL存储过程参数的SQL是什么? information_schema.routines
表保存存储过程名称,但似乎没有存储参数的标准位置。
答案 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;