🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

解決済

2回答

10284閲覧

OracleDB,Number型の領域について

11kiny

総合スコア5

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/12/17 01:40

編集2020/12/17 02:13

OracleDBについての質問なのですが

Oracle

1SELECT column_name, data_type, data_length FROM all_tab_columns WHERE table_name = '" + table + "' Order BY column_id

※tableは変数
バージョン Oracle Database 11g

Create例
NUMBER(9,0)
NUMBER(3,0)
両者いずれもdata_lengthが22

Number型を様々な桁数でCreateしているのですが
SELECT文によってデータサイズを見たところ
char,varchar2はバイト数が桁数によって可変していたのですが
Number型だけ桁数にかかわらず22バイトにすべてなっておりました。

これはNumberの領域が22バイトで確保されておりデータを入れるたびにそのデータに
あわせて22バイトの領域を可変するといったものになっているのでしょうか?

以上になります。
何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2020/12/17 02:00

> SELECT文によってデータサイズを見たところ 現象を調査できるように調査したそのSELECT文、CREATE TABLE文やINSERTしたデータのINSERT文を質問に https://teratail.com/help/question-tips#questionTips3-7 の [コード] で追記しては? 念の為、Oracle Databaseのバージョン、プラットフォームとそのバージョンも明記しては?
11kiny

2020/12/17 02:14

追記いたしました ご指摘ありがとうございます
Orlofsky

2020/12/17 06:19

CREATE TABLE文はSQL*Plusにペーストすれば実行できるレベルで提示してください。次回から
11kiny

2020/12/20 08:25

ご丁寧にありがとうございます。 次回からもう少し受けての気持ちを考えて質問します。 ありがとうございました。
guest

回答2

0

[NUMBER型ではDATA_PRECISIONに整数部と小数部を含む全体の桁数、DATA_SCALEに小数点以下の桁数が設定されます。ALL_TAB_COLUMN

投稿2020/12/17 02:26

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

11kiny

2020/12/17 05:04

URLありがとうございます。 自分の知識不足でした整数、少数ごとで桁数を取得できたのですね。 テーブル定義書通りに数値が取得できずに頭を抱えておりましたがすっきりしました。 ありがとうございました。
guest

0

ベストアンサー

Number型だけ桁数にかかわらず22バイトにすべてなっておりました。

データの値によって可変です。

以下リファレンスです。

NUMBERデータ型

Each NUMBER value requires from 1 to 22 bytes.

(日本語訳) 各NUMBER値には1〜22バイトが必要です。

定義によってサイズが変わるのではなく、値によってサイズが変わるので、最大である22バイトと考えていた方が良いでしょう。
例えば、例えば、1,000,000,000,000 と 12345 なら 12345 の方がデータ長が長くなります。
※浮動小数点表記での管理である為。

投稿2020/12/17 02:12

編集2020/12/17 02:35
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

11kiny

2020/12/17 05:02

ご回答ありがとうございます。 入れたデータを select column, LENGTH(column) from table; で見るとデータ長が変わっていることが確認できました。 またデータ数が多いと科学表記で入れるので38桁まで表現可能なのですね 22バイトなのになぜ最大数が38桁なのか気になっておりましたがすっきりしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問