qtyだと思います varchar2として定義されています my_tableで --それ以外の場合、to_numberを呼び出しても目的はありません。 。その仮定が正しければ、テーブルにqtyがある他の行があることに賭けます。 数値以外のデータが含まれています。
SQLはセットベースの言語であるため、Oracle(またはその他のデータベース)は、適切と思われる順序で物事を完全に自由に評価できます。つまり、Oracleはto_number(qty)を完全に自由に評価できます。 id=12345を適用する前の式 述語。 Oracleがqtyの行に遭遇した場合 値を数値に変換できないため、エラーがスローされます。
id=12345の特定の行に数値以外のデータが含まれている可能性もあります。 それはたまたま表示されていません(たとえば、制御文字)。クエリを実行することで確認できます
SELECT dump(qty, 1016)
FROM my_table
WHERE id = 12345
(16進数ではなく10進数が必要な場合は、dumpの2番目のパラメーターとして1010を使用します。 )そして、データに予期しないものがないかどうかを確認します。