0

MySQLで、からを取得してcolumn_typeから、へのステートメントinformation_schema.columnsを生成したいと思います。ただし、両方とも、データ型が何であるかについて独自のアイデアを持っているようです。たとえば、情報スキーマから、、を頻繁に受け取り、本質的に実行したいのですが、これは構文エラーであると表示されます。SELECTCASTscolumn_typeCASTCONVERTVARCHAR(64)TEXTINT(10) UNSIGNEDCONVERT(`Table`.`Column`, INT(10) UNSIGNED)

私はそれをとして書く必要がありますCONVERT(`Table`.`Column`, UNSIGNED)が、その場合、すべての可能な応答を解析しcolumn_typeて同等のものに変換するコードを書く必要がありますCAST、そしてそれでも私が必要とするコードを生成することは保証されません: BIGINTを取得してINTに詰め込もうとした場合はどうなりますか?テーブルの定義に使用される実際の列タイプへのキャストを実行する方法はありますか?

4

1 に答える 1

0

したがって、別のSQLステートメントの値を使用してSQLステートメントを作成する必要があります。

これは「動的SQL」と呼ばれ、MySQLでは、ストアドプロシージャ内にプリペアドステートメントを作成することによってのみ可能です。さらに、プリペアドステートメントはユーザー変数からのみ作成できます。

したがって、次のような結果になります。

CREATE PROCEDURE ...() BEGIN
  DECLARE desired_type VARCHAR(255);
  SELECT column_type FROM information_schema.columns ... INTO desired_type;
  SET @your_dynamic_sql = CONCAT("UPDATE ... SET ... = CONVERT(..., ", desired_type, ");");
  PREPARE update_statement FROM @your_dynamic_sql;
  EXECUTE update_statement;
END
于 2012-06-16T01:03:30.777 に答える