2012-03-03 27 views
3

MySQLストアドプロシージャのパラメータをリストするSQLとは何ですか? 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

より新しいバージョン(5.5.3 and aboveが)どのべきinformation_schema.parametersオブジェクトを導入していますmysql.procテーブルへ のアクセスを必要とします必要な情報を提供します。

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?これらの着信コールは、あなたが 見ているとbodyフィールドがlongblob型であるところのMySQLの 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; 
関連する問題