2012-03-03 8 views
3

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

+0

См. Http://stackoverflow.com/questions/733349/list-of-stored-procedures-functions-mysql-command-line. Не уверен, что вы можете изолировать параметры без основного текста. – kaj

+2

Какая версия вы используете? В более новых версиях есть параметры information_schema.parameters. В более старых версиях посмотрите на параметр mysql.proc - column paramlist (хотя они не в отличном формате!) – dash

+0

@ dash bang on, не знаю, как я пропустил эту таблицу. Я использую 5.5.9. Если вы поместите это как ответ, я приму это. – icc97

ответ

11

Более поздние версии 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

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

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,@[email protected]+1)); 
     set @firstchar=(select CHAR_LENGTH(SUBSTRING_INDEX(@wyraz,',',@spacje)))+2; 
     insert into tab (substrings) 
     select @sub; 
     set @[email protected]+1; 
    end while; 
    END IF; 
    select substrings as params from tab where substrings <>''; 
    END; 
Смежные вопросы