1

-7.2E-75 から +7.2E+75 の間の数値を取りたいです。NUMBER の精度と位取りを指定するにはどうすればよいですか。(スケール範囲は 1 から 38 で、精度は -84 から 127 です)。

これを達成する他の方法がある場合は、提案してください。

4

1 に答える 1

4

提案する数値は、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 つの値はまだ大きすぎるため、指数表記を使用する必要があります。

于 2013-06-26T08:49:12.960 に答える