私はmysql 5.0を使用しています。私は文字列内のデータベースのすべてのメタデータを取得し、それを返すストアドプロシージャを持っています。私はテーブルのメタデータを取得するために別のストアドプロシージャを呼び出します。My SQLストアドプロシージャ
call Getfields(tbNm, dbNm, fields);
フィールドとして宣言されました:私は私が別のストアドプロシージャを呼び出すことにより、フィールドのメタデータを添付しています。この文字列内の
DECLARE tb_cur CURSOR FOR SELECT table_name, table_schema FROM INFORMATION_SCHEMA.TABLES;
をスキーマとそのテーブルのリストを取得するには、以下を使用しています:
:私は、単一の文字列を取得するために、すべてを連結Declare fields blob default "";
私は別にれるGetFieldsを実行すると3210
dbNmとtbNmが
varchar(50)
procの保存私れるGetFieldsで出力型であると宣言されているout fields blob
私の主な手順からの出力はOUT output blob
ですテーブルのフィールドデータを返しますが、メインプロシージャ内から呼び出すと、行16のcoltypeで長すぎる1406エラーデータが返されます。 カラムテーブルのcolumn_typeフィールドのタイプが長いテキストであることがわかりましたので、連結変数タイプのBLOBを作成しました。
ヒント/提案? 私は数日間このことに固執しています!
- クエリ
SELECT GROUP_CONCAT(table_info SEPARATOR '~') table_info FROM (
SELECT CONCAT(t.table_schema, '.', t.table_name, '*',
GROUP_CONCAT(CONCAT(c.column_name, '+', c.COLUMN_TYPE) SEPARATOR ','))
table_info
FROM information_schema.TABLES t
JOIN information_schema.COLUMNS c
ON t.table_schema = c.table_schema AND t.table_name = c.table_name
GROUP BY t.table_name
) t;
ストアドプロシージャの内部呼び出しでエラーが発生していたのはなぜですか?私は、カーソルとしてクエリを使用し、コンマ区切り文字列を作成し、それは何の問題もない!どうもありがとう! – kavita
まだカーソルの使用を避けることができます。編集したクエリを見てください。 – Devart
はいカーソルなしで編集したクエリを使用しました。 1つの表データのみを戻します。私はすべてのデータベースのすべてのクエリを、私はすべてのデータベースのすべてのテーブルのすべての行を表示する内側のクエリを実行する場合は、外部のグループconcatを追加した後に単一のテーブルのデータが表示されます。私のクエリは編集されています。 – kavita