Oracle PL/SQL データ型: ブール、数値、日付 [例]

⚡ スマートサマリー

PL/SQLデータ型は、 Oracle ブロック内の各値を格納、処理、および制約します。これらは、文字、数値、ブール値、日付、およびラージオブジェクト(LOB)の各ファミリーに分類され、それぞれ独自の格納形式、サイズ制限、および割り当てルールがあります。

  • 🔤 文字: CHARは固定長、VARCHAR2は可変長、NCHARとNVARCHAR2は各国語文字セットを使用します。
  • 🔢 数: NUMBER型は、最大38桁の精度を持つ固定小数点値または浮動小数点値を格納します。
  • ブール値: 真偽値を保持し、主に条件付き論理で使用されます。
  • 📅 日付: 日付と時刻を保存します。時刻が指定されていない場合は、デフォルトで午前0時になります。
  • 🗂️ LOB: BLOB、CLOB、NCLOB、およびBFILEは、最大128TBの大規模な非構造化データを保存します。
  • 💡 ベストプラクティス: メモリを節約し、将来性を確保するためには、CHAR型よりもVARCHAR2型、LONG型よりもLOB型を優先してください。
  • 🔗 範囲: SQL型はテーブルの列に適用され、PL/SQL型はPL/SQLブロック内で使用されます。

Oracle PL/SQL データ型

PL/SQLのデータ型とは何ですか?

データ型 PL/SQLでは、データがどのように保存、処理、扱われるかを定義します。 Oracle 保存および処理中。データ型は特定の保存形式と範囲制約に関連付けられています。 Oracle各値または定数にはデータ型が割り当てられます。

PL/SQL との主な違いは、 SQL データ型は、SQL データ型はテーブルの列に限定されるのに対し、PL/SQL データ型はテーブル列で使用されます。 PL/SQLブロックこれについてはチュートリアルの後半で詳しく説明します。

以下はさまざまな図です Oracle PL/SQLデータ型:

PL/SQLのさまざまなデータ型
PL/SQLのさまざまなデータ型

PL/SQL CHARACTER データ型

このデータ型は、英数字を文字列形式で格納します。文字型データ型に値を代入する際は、リテラル値を必ず単一引用符で囲む必要があります。

この文字データ型はさらに次のように分類されます。

  • CHARデータ型(固定文字列サイズ)
  • VARCHAR2データ型(可変長文字列)
  • VARCHARデータ型
  • NCHAR (ネイティブ固定文字列サイズ)
  • NVARCHAR2 (ネイティブ変数文字列サイズ)
  • 長くて長い生
Data Type 詳細説明 構文
CHAR このデータ型は文字列値を格納し、文字列のサイズは宣言時に固定されます。 変数.

  • Oracle 変数が宣言されたサイズ全体を占めない場合は、変数を空白で埋めます。 Oracle 変数がそのサイズを使い切らなくても、宣言されたサイズのメモリを割り当てます。
  • サイズ制限は 1 ~ 2000 バイトです。
  • CHAR型は、固定サイズのデータ​​を扱う場合に最も適しています。
grade CHAR;
manager CHAR (10):= 'guru99';

構文の説明:

  • 最初のステートメントは、最大サイズが1バイト(デフォルト値)のCHARデータ型の変数「grade」を宣言します。
  • 2番目のステートメントでは、最大サイズが10のCHARデータ型の変数「manager」を宣言し、6バイトの値「guru99」を代入しています。 Oracle この場合は、6バイトではなく10バイトが割り当てられます。
VARCHAR2 このデータ型は文字列を格納しますが、長さは固定されていません。

  • テーブルの列のサイズ制限は1~4000バイト、変数のサイズ制限は1~32767バイトです。
  • 変数のサイズは、宣言時に各変数ごとに定義されます。
  • Oracle 変数が定義された後にのみメモリが割り当てられるため、宣言されたサイズではなく、格納されている文字列の実際の長さが使用されます。
  • メモリ使用量を最適化するためには、CHAR型ではなくVARCHAR2型を使用するのが常に良い方法です。
manager VARCHAR2(10) := 'guru99';

構文の説明:

  • このステートメントは、最大サイズが10のVARCHAR2データ型の変数「manager」を宣言し、6バイトの「guru99」を代入します。 Oracle ここではわずか6バイトのメモリしか割り当てません。
VARCHAR これは、VARCHAR2 データ型と同義です。

  • 動作変更を避けるためには、VARCHAR の代わりに VARCHAR2 を使用するのが常に良い方法です。
manager VARCHAR(10) := 'guru99';

構文の説明:

  • このステートメントは、最大サイズ10のVARCHARデータ型の変数「manager」を宣言し、「guru99」という6バイトの値を代入します。 Oracle VARCHAR2と同様に、わずか6バイトしか割り当てません。
NCHAR このデータ型はCHAR型と同じですが、文字セットは各国語の文字セットです。

  • この文字セットは、NLS_PARAMETERS を使用してセッションに対して定義できます。
  • 文字セットは UTF16 または UTF8 のいずれかです。
  • サイズ制限は 1 ~ 2000 バイトです。
native NCHAR(10);

構文の説明:

  • このステートメントは、最大サイズが10のNCHARデータ型の変数「native」を宣言します。
  • 長さは、文字セットで定義されている文字あたりのバイト数によって決まります。
NVARCHAR2 このデータ型はVARCHAR2と同じですが、文字セットは各国語の文字セットです。

  • この文字セットは、NLS_PARAMETERS を使用してセッションに対して定義できます。
  • 文字セットは UTF16 または UTF8 のいずれかです。
  • サイズ制限は 1 ~ 4000 バイトです。
Native_var NVARCHAR2(10):= 'guru99';

構文の説明:

  • このステートメントは、最大サイズが10のNVARCHAR2データ型の変数「Native_var」を宣言します。
長くて長い生 このデータタイプは、最大2GBまでの大きなテキストデータまたは生データを格納します。

  • これらは主にデータ ディクショナリで使用されます。
  • LONG型は文字セットデータを格納し、LONG RAW型はバイナリ形式でデータを格納します。
  • LONG RAWはメディアオブジェクトや画像を受け入れるのに対し、LONGは文字セットを使用して保存できるデータのみを扱います。
Large_text LONG;
Large_raw LONG RAW;

構文の説明:

  • このステートメントは、LONGデータ型の「Large_text」とLONG RAWデータ型の「Large_raw」を宣言します。

注意: LONGデータ型の使用は推奨されません OracleLOBデータ型を使用することをお勧めします。

PL/SQL NUMBER データ型

このデータ型は、最大38桁の精度を持つ固定小数点数または浮動小数点数を格納します。数値データのみを含むフィールドを扱う場合に使用されます。変数は、精度と小数点以下の桁数を指定して宣言することも、指定せずに宣言することもできます。値を代入する際に、引用符で囲む必要はありません。

A NUMBER(8,2);
B NUMBER(8);
C NUMBER;

構文の説明:

  • 最初の宣言では、合計精度が8桁で小数点以下2桁の数値データ型の変数「A」を宣言しています。
  • 2番目は、合計精度が8で小数点以下の桁がない数値データ型の「B」を宣言します。
  • 3つ目は最も汎用的な方法で、数値データ型を「C」と宣言し、精度や小数点以下の桁数に制限はありません。最大38桁まで指定できます。

PL/SQL BOOLEAN データ型

このデータ型は論理値を格納します。 Oracle ブール型はTRUEまたはFALSEを表し、主に条件文で使用されます。値を代入する際に引用符で囲む必要はありません。

Var1 BOOLEAN;

構文の説明:

  • 変数「Var1」はブール型として宣言されています。出力は、設定された条件に基づいて真または偽のいずれかになります。

PL/SQL DATE データ型

このデータ型は、日付、月、年の形式で値を格納します。DATEデータ型で定義された変数には、時刻情報を含めることができます。時刻が指定されていない場合、デフォルトでは12:00:00に設定されます。値を代入する際は、引用符で囲む必要があります。

標準 Oracle 入力および出力の時刻フォーマットは「DD-MON-YY」であり、これはセッションレベルのNLS_PARAMETERS(NLS_DATE_FORMAT)で設定されます。

newyear DATE:= '01-JAN-2015';
current_date DATE:= SYSDATE;

構文の説明:

  • 変数「newyear」はDATEデータ型として宣言され、2015年1月1日という値が代入されます。
  • 2番目の宣言では、「current_date」をDATEデータ型として宣言し、現在のシステム日付を割り当てています。
  • どちらの変数も時間情報を含んでいます。

PL/SQL LOB データ型

このデータ型は主に、画像やマルチメディアファイルなどの非構造化データの大きなブロックを保存および操作するために使用されます。 Oracle LOBデータ型はLONG​​データ型よりも柔軟性が高いため、LOBデータ型を推奨します。LOBデータ型がLONGデータ型よりも優れている主な利点は以下のとおりです。

  • テーブルにはLONG​​型の列が1つしか含まれませんが、LOB型の列の数には制限がありません。
  • データインターフェースツールはレプリケーション時にLOB型を受け入れますが、LONG型の列は除外するため、手動でレプリケーションする必要があります。
  • LONGカラムは最大2GBまで格納できますが、LOBカラムは最大128TBまで格納できます。
  • Oracle LOBデータ型はリリースごとに改良され続けているのに対し、LONGはほとんど変更されていない。

したがって、LONG型ではなくLOB型を使用するのが常に良いでしょう。以下の異なるLOB型データ型は、最大128テラバイトのデータを保存できます。

  1. BLOB
  2. CLOB と NCLOB
  3. BFファイル
Data Type 詳細説明 構文
BLOB このデータタイプは、LOBデータをバイナリファイル形式で最大128TBまで格納します。文字セットの詳細に基づいてデータを格納しないため、マルチメディアオブジェクトや画像などの非構造化データを格納できます。
Binary_data BLOB;

構文の説明:

  • 変数「Binary_data」はBLOBとして宣言されています。
CLOB と NCLOB CLOBはLOBデータを文字セットに格納するのに対し、NCLOBはネイティブ文字セットにデータを格納します。これらは文字セットベースのストレージを使用するため、マルチメディアや画像などのデータは格納できません。最大サイズは128TBです。
Charac_data CLOB;

構文の説明:

  • 変数「Charac_data」はCLOBデータ型として宣言されています。
BFファイル
  • BFILEは、構造化されていないバイナリデータを、データベースとは別のオペレーティングシステムファイルとして保存します。
  • BFILEのサイズはオペレーティングシステムによって制限されており、ファイルは読み取り専用で変更することはできません。

よくあるご質問

CHAR型は固定長で、宣言されたサイズまで空白を埋めるため、短い値ではスペースが無駄になります。VARCHAR2型は可変長で、実際の文字のみを格納するため、ほとんどの文字列列にはVARCHAR2型が推奨されます。

LOBは1つのテーブルに複数の列を格納でき、最大128TBのデータを保存可能で、リリースごとに改良が続けられています。一方、LONGは1列に制限され、最大2GBまでしか格納できず、主に下位互換性のために残されています。

以前のリリースではそうではありませんでした。BOOLEANはPL/SQL専用の型だったため、テーブルの列では代わりにNUMBERまたはCHARフラグが使用されていました。条件ロジックのためにブロック内で直接使用されます。

はい。AIはサンプル値の長さ、範囲、フォーマットを分析することで、VARCHAR2、NUMBER、DATE、LOBなどの型を提案し、サイズが大きすぎる列を特定できます。今後のデータに対して、選択した型を検証してください。

はい。DATE型は、世紀、年、月、日、時、分、秒を格納します。時刻が指定されていない場合は、デフォルトで午前0時になります。小数秒やタイムゾーンを指定する場合は、TIMESTAMP型を使用してください。