2

一重引用符を使用して以下のSQLコマンドを実行して数値を入力すると、一重引用符を削除するとエラーが発生し、正常に更新されます。フィールドHEIGHTのタイプがNUMBERであることを知っています。

奇妙なことに、異なるマシンで一重引用符を使用して同じSQLステートメントを使用しようとしましたが、正常に実行されるマシンもあれば、実行されないマシンもあります(同じOracleバージョン、同じテーブル構造...)

説明をお願いします

SQL>  UPDATE TBL_DEVICE_INFO SET HEIGHT='14.5'  WHERE ID='6ujbfI';
 UPDATE TBL_DEVICE_INFO SET HEIGHT='14.5'  WHERE ID='6ujbfI'
                                   *
ERREUR à la ligne 1 :
ORA-01722: invalid number



SQL>  UPDATE TBL_DEVICE_INFO SET HEIGHT=14.5  WHERE ID='6ujbfI';

1 row updated.
4

2 に答える 2

6

これはおそらくロケールの問題です。

つまり、一部のマシンには小数点記号「。」が付いています。(ピリオド)、そしていくつかは "、"(コンマ)を持っています。

次のように配置することでテストできます。

UPDATE TBL_DEVICE_INFO 
   SET HEIGHT = to_number('14.5', '99D9','NLS_NUMERIC_CHARACTERS = ''. ''') 
   WHERE ID='6ujbfI'

数値が単一のqoutesの場合、Oracleはデータベースに設定されている文字を使用して数値に暗黙的に変換します。

NLS_NUMERIC_CHARACTERSパラメーターを設定することにより、デフォルトを変更できます。

alter session set NLS_NUMERIC_CHARACTERS = '. ';

ただし、これはシステムから返されるデータにも反映されるため、変更した場合でもアプリケーションで何も壊れないようにしてください。

于 2009-09-16T10:30:50.500 に答える
1

文字列は一重引用符で囲む必要がありますが、数字は引用符で囲むことはできません。

無効な構文が機能するマシンで別のクライアントを使用している可能性がありますか?

于 2009-09-16T10:29:47.973 に答える