-7.2E-75 から +7.2E+75 の間の数値を取りたいです。NUMBER の精度と位取りを指定するにはどうすればよいですか。(スケール範囲は 1 から 38 で、精度は -84 から 127 です)。
これを達成する他の方法がある場合は、提案してください。
-7.2E-75 から +7.2E+75 の間の数値を取りたいです。NUMBER の精度と位取りを指定するにはどうすればよいですか。(スケール範囲は 1 から 38 で、精度は -84 から 127 です)。
これを達成する他の方法がある場合は、提案してください。
提案する数値は、Oracle NUMBER データ型の制限内に収まっています。
精度を指定する必要がありますか? 列を NUMBER のみとして定義することは許可されています。
SQL> desc t1
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NUMBER
COL2 NUMBER
COL3 NUMBER
COL4 NUMBER
SQL> insert into t1 (col1, col2) values ( -7.2E-75, +7.2E+75);
1 row created.
SQL>
気になるのが範囲の境界である場合は、ルールを適用するために CHECK 制約を定義する必要があります。
「COL1に123456766675544.344546567676を取り、データ型としてNUMBERを失敗させたいとします」
失敗?どのように?その値は私にとってはうまくいきます(前と同じテーブル):
SQL> insert into t1 (col1) values ( 123456766675544.344546567676);
1 row created.
SQL>
そのため、エラー メッセージなどの詳細をお知らせください。
「上記のクエリを起動すると、123456766675544 だけが表示されます。」
それは表示の問題のように聞こえます。正しい値が挿入されています。これをチェックしてください:
SQL> set numwidth 50
SQL> select col1 from t1
/
2
COL1
--------------------------------------------------
7.20000000000000000000000000000000000000000000E+75
123456766675544.344546567676
SQL>
この場合、NUMWIDTH を最大許容値 (SQL*plus で) に設定すると、1 つの値を表示できますが、もう 1 つの値はまだ大きすぎるため、指数表記を使用する必要があります。