すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:プロシージャでSQL文を実行するときにエラーが報告された場合はどうすればよいですか?

最終更新日:Jan 22, 2024

問題の説明

プロシージャ内で正常に実行されたSQL文の実行に失敗し、エラーが報告されます。

例:

UPDATEステートメントを実行して、date属性の列の値を空の文字列に変更します。

UPDATE t1 SET start_date="" ここでid=2;

ステートメントが正常に実行され、警告が報告されます。

+ -------- -------- + -------------------------------------------------------- +
| レベル | コード | メッセージ |
+ -------- + ------- + -------------------------------------------------------- +
| 警告 | 1265 | 行2の列 'start_date' のデータが切り捨てられる |
+ -------- + ------- + -------------------------------------------------------- + 

プロシージャでのステートメントの実行に失敗し、エラーが報告されます。

エラー1292 (22007): 行2の列 'start_date' の日付値が正しくない: ''

原因

プロシージャを作成すると、MySQLはsql_mode変数の値を記録し、その値をmysql.procシステムテーブルに格納します。 プロシージャの実行中は、実行時の値ではなく、プロシージャの作成時に指定されたsql_mode変数の値を使用します。 前者の値が後者の値よりも多くの制限を有する場合、エラーが報告される。

たとえば、プロシージャの作成時に指定されるsql_mode変数の値は 'STRICT_TRANS_TABLES 'で、ランタイムの値は ''です。 値 'STRICT_TRANS_TABLES 'には、値 ''よりも多くの制限があります。 その結果、このエラーが発生します。

ソリューション

次のいずれかの方法を使用して、エラーを解決できます。

  • ビジネス要件に基づいてsql_mode変数を設定し、プロシージャを再度作成します。

  • ビジネス要件に基づいて、mysql.procシステムテーブルのプロシージャに対応するsql_mode変数の値を変更します。

    UPDATE mysql.proc SET sql_mode='xxx' WHEREプロシージャ='xxx';