私は最近仕事で問題に遭遇しました:
システムの一部の論理処理はストアド プロシージャを使用して実装されていますが、ある日カスタマー サービスから、注文に含まれる基本的な製品リソースを確認した後、注文が行われなかったと報告されました。問題ありませんでした。
注文のストアド プロシージャには 2 行のコードがあります:
1 declare _err int default 0;2 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1;3 DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' set _err=2;
ストアド プロシージャの実行後、変数 _err は 1 を返します。問題を見つけるにはストアド プロシージャをデバッグするしかありません。次の段落をデバッグしていると、この SQL を実行した後、_err が 1 になっていることがわかりました
1 select group_concat(concat(@room_name,',',run_date,',',total_count) separator '|') into @order_desc from tmp_order_detail order by run_date;
一時テーブル tmp_order_detail に大量のデータがあるため、group_concat の問題だと推測したので、一時テーブルのデータが半分に減り、成功したことがわかったので、group_concat に長さの制限があるのではないかと思ってググってみたところ、それは本当でした。
group_concat 関数について:
group_concat: デフォルトの接続可能な長さは 1024 です。最大長が設定されている場合、この長さを超えるとこの長さにカットされます。 ) ステートメント、group_concat を使用すると、制限は無効になります。解決策:
1、MySQL 構成ファイルを変更します。も使用しますSQL ステートメントの設定:
#需要设置的长度 group_concat_max_len = 5120ストアド プロシージャで上記の 2 番目の方法を採用し、ストアド プロシージャを実行しました。OK、成功しました。 仕事を休みましょう(今日は日曜日です)! ! !
以上がMySQLのgroup_concat()関数の使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。