Как вывести список хранимых процедур mysql - PullRequest
4 голосов
/ 03 марта 2012

Что такое SQL для отображения параметров хранимой процедуры MySQL? Таблица information_schema.routines содержит имена хранимых процедур, но, похоже, не существует стандартного места для хранения параметров.

Ответы [ 3 ]

12 голосов
/ 04 марта 2012

Более поздние версии MySQL ( 5.5.3 и выше ) представили объект 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 голос
/ 03 марта 2012

show create procedure show create function? эти входящие звонки требуют доступ к таблице mysql.proc, где вы должны посмотреть и поле body имеет тип longblob select cast(param_list as char) from mysql.proc where name='' and type='PROCEDURE'

0 голосов
/ 16 июля 2013

Я написал процедуру, которая возвращает список параметров в таблице.Это может быть полезно для кого-то.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...