PL/SQL - データ型

こんにちは、将来のプログラマーたち!今日は、PL/SQLのデータ型の魅力的な世界に飛び込みます。プログラミングが初めてであれば安心してください。私はあなたを一歩一歩ガイドします。このチュートリアルの終わりまでに、PL/SQLのさまざまなデータ型に慣れ、コーディングの冒険を始める準備が整います!

PL/SQL - Data Types

PL/SQL ス칼ラデータ型とサブタイプ

基礎から始めましょう。PL/SQLでは、ス칼ラデータ型は私たちのプログラムの構成要素です。これらは単一の値、例えば数値やテキストを表現します。

ス칼ラデータ型とは?

ス칼ラデータ型はPL/SQL中最もシンプルなデータの形です。私たちのプログラミングの宇宙の原子のようなものです。小さく、分割不能なユニットで、より複雑な構造を築くために使用します。

以下にス칼ラデータ型のシンプルな例を示します:

DECLARE
my_name VARCHAR2(50) := 'John Doe';
BEGIN
DBMS_OUTPUT.PUT_LINE('私の名前は: ' || my_name);
END;

この例では、my_nameVARCHAR2データ型の変数で、テキストを保存するために使用されます。それに'John Doe'という値を割り当てました。このコードを実行すると、「私の名前は: John Doe」と表示されます。

PL/SQL 数値データ型とサブタイプ

次に数値について話しましょう。PL/SQLには、さまざまな種類の数値を扱うための複数の数値データ型があります。

一般的な数値データ型

データ型 説明
NUMBER 汎用の数値 NUMBER(10,2)
INTEGER 整数 INTEGER
BINARY_FLOAT 32ビット浮動小数点数 BINARY_FLOAT
BINARY_DOUBLE 64ビット浮動小数点数 BINARY_DOUBLE

これらを実行してみましょう:

DECLARE
my_integer INTEGER := 42;
my_float BINARY_FLOAT := 3.14;
my_salary NUMBER(8,2) := 5000.50;
BEGIN
DBMS_OUTPUT.PUT_LINE('答えは: ' || my_integer);
DBMS_OUTPUT.PUT_LINE('πは約: ' || my_float);
DBMS_OUTPUT.PUT_LINE('私の給料は: $' || my_salary);
END;

このスクリプトは、異なる数値型の3つの変数を宣言しています。my_salaryNUMBER(8,2)型は、合計で8桁まで保存でき、小数点以下に2桁の桁数を持つことを意味します。

PL/SQL 文字列データ型とサブタイプ

テキストデータはプログラミングにおいて非常に重要です。PL/SQLは、テキストを効率的に扱うための複数の文字列データ型を提供しています。

一般的な文字列データ型

データ型 説明
VARCHAR2 可変長文字列 VARCHAR2(100)
CHAR 固定長文字列 CHAR(10)
NVARCHAR2 可変長Unicode文字列 NVARCHAR2(100)
NCHAR 固定長Unicode文字列 NCHAR(10)

以下にこれらの使用例を示します:

DECLARE
my_varchar VARCHAR2(50) := 'Hello, World!';
my_char CHAR(10) := 'Fixed     ';
my_nvarchar NVARCHAR2(50) := N'こんにちは'; -- 日本語の「Hello」
BEGIN
DBMS_OUTPUT.PUT_LINE('VARCHAR2: ' || my_varchar);
DBMS_OUTPUT.PUT_LINE('CHAR: ' || my_char || '(終わり)');
DBMS_OUTPUT.PUT_LINE('NVARCHAR2: ' || my_nvarchar);
END;

CHAR型は、文字列を固定長にするためにスペースで埋めます。

PL/SQL 布尔データ型

布尔データ型は、プログラムでの意思決定において非常に重要です。它们只能有三个可能的值:TRUE、FALSE、またはNULL。

DECLARE
is_student BOOLEAN := TRUE;
has_job BOOLEAN := FALSE;
is_married BOOLEAN;
BEGIN
IF is_student THEN
DBMS_OUTPUT.PUT_LINE('この人は学生です。');
END IF;

IF NOT has_job THEN
DBMS_OUTPUT.PUT_LINE('この人は仕事がありません。');
END IF;

IF is_married IS NULL THEN
DBMS_OUTPUT.PUT_LINE('この人が結婚しているかどうかはわかりません。');
END IF;
END;

このスクリプトは、布尔値を使用してコード内で意思決定を行う方法を示しています。

PL/SQL 日時とインターバル型

日時や時間を扱う際に、PL/SQLはこれらの値を正確に処理するための特定のデータ型を提供しています。

一般的な日時型

データ型 説明
DATE 日時 DATE
TIMESTAMP 日時と分数秒 TIMESTAMP
INTERVAL YEAR TO MONTH 年と月の期間 INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND 日、時間、分、秒の期間 INTERVAL DAY TO SECOND

以下にこれらを実行してみましょう:

DECLARE
current_date DATE := SYSDATE;
future_date TIMESTAMP := SYSTIMESTAMP + INTERVAL '1' YEAR;
age_interval INTERVAL YEAR TO MONTH;
BEGIN
age_interval := (SYSDATE - TO_DATE('1990-01-01', 'YYYY-MM-DD')) YEAR TO MONTH;

DBMS_OUTPUT.PUT_LINE('現在の日付: ' || TO_CHAR(current_date, 'DD-MON-YYYY'));
DBMS_OUTPUT.PUT_LINE('1年後の日付: ' || TO_CHAR(future_date, 'DD-MON-YYYY HH24:MI:SS.FF'));
DBMS_OUTPUT.PUT_LINE('年齢: ' || age_interval);
END;

このスクリプトは、日付、タイムスタンプ、インターバルの使用方法を示しています。

PL/SQL 大型オブジェクト(LOB)データ型

大量のデータを扱うために、PL/SQLはLOB(Large Object)データ型を提供しています。

一般的なLOB型

データ型 説明
CLOB 文字Large Object CLOB
BLOB バイナリLarge Object BLOB
NCLOB ナショナルCharacter Large Object NCLOB

以下にCLOBの簡単な使用例を示します:

DECLARE
my_clob CLOB;
BEGIN
my_clob := 'これは、潜在的にはメガバイト単位の非常に長い文字列です。';
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.GETLENGTH(my_clob) || ' 文字');
END;

このスクリプトは、CLOBを作成し、その長さを取得する方法を示しています。

PL/SQL ユーザー定義サブタイプ

PL/SQLでは、既存のデータ型に基づいて独自のサブタイプを作成できます。これにより、コードが読みやすく保守がしやすくなります。

DECLARE
SUBTYPE positive_number IS NUMBER(8,2) CHECK (positive_number > 0);
my_salary positive_number;
BEGIN
my_salary := 5000.50;
DBMS_OUTPUT.PUT_LINE('私の給料: $' || my_salary);

-- これはエラーを引き起こします:
-- my_salary := -1000;
END;

この例では、positive_numberというサブタイプを作成し、常に正の値を持つようにしました。

PL/SQLのNULL

最後にNULL値について話しましょう。PL/SQLでは、NULLは未知または利用できない値を表します。ゼロや空の文字列と同じではありません。

DECLARE
var1 NUMBER;
var2 VARCHAR2(10) := '';
BEGIN
IF var1 IS NULL THEN
DBMS_OUTPUT.PUT_LINE('var1はNULLです');
END IF;

IF var2 IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE('var2はNULLではありません。空の文字列です');
END IF;
END;

このスクリプトは、NULLと空の文字列の違いを示しています。

そして、それがすべてです!PL/SQLの主要なデータ型をカバーしました。データ型を理解することは、効率的でエラーのないコードを書くためには非常に重要です。練習を続け、間もなくPL/SQLのプロになるでしょう!

Credits: Image by storyset