宣言
宣言によって、指定されたデータ型の値の記憶域を割り当て、値を参照できるように格納場所に名前を付けます。
オブジェクトは、参照する前に宣言しておく必要があります。宣言は、任意のブロック、サブプログラムまたはパッケージの宣言部で使用できます。
ここでのトピック
変数と定数以外のオブジェクトの宣言の詳細は、「ブロック」のdeclare_section
の構文を参照してください。
NOT NULL制約
スカラー変数または定数(またはコンポジット変数または定数のスカラー・コンポーネント)には、NOT
NULL
制約を指定できます。
NOT
NULL
制約を指定すると、その項目にNULL値を代入できなくなります。この制約は、(データ型から)暗黙的に指定するか、または明示的に指定することができます。
NOT
NULL
を指定するスカラー変数の宣言では、暗黙的か明示的かに関係なく、初期値を変数に代入する必要があります(スカラー変数のデフォルトの初期値はNULL
であるため)。
PL/SQLは長さが0(ゼロ)の文字値をすべてNULL
値とみなします。これには文字関数やブール式によって戻された値が含まれます。
NULL
値かどうかをテストするには、「IS [NOT] NULL演算子」を使用します。
例
例3-9 NOT NULL制約が指定された変数の宣言
この例では、変数acct_id
にNOT
NULL
制約を明示的に指定し、変数a
、b
およびc
にはデータ型から暗黙的に指定します。
DECLARE acct_id INTEGER(4) NOT NULL := 9999; a NATURALN := 9999; b POSITIVEN := 9999; c SIMPLE_INTEGER := 9999; BEGIN NULL; END; /
例3-10 NULL値に初期化される変数
この例では、すべての変数がNULL
に初期化されます。
DECLARE null_string VARCHAR2(80) := TO_CHAR(''); address VARCHAR2(80); zip_code VARCHAR2(80) := SUBSTR(address, 25, 0); name VARCHAR2(80); valid BOOLEAN := (name != ''); BEGIN NULL; END; /
変数の宣言
変数の宣言では、変数の名前とデータ型を常に指定します。
ほとんどのデータ型の場合、変数を宣言するときに初期値を指定することもできます。
変数名は、有効なユーザー定義の識別子である必要があります。
データ型は、任意のPL/SQLデータ型を選択できます。PL/SQLデータ型にはSQLデータ型が含まれます。データ型は、スカラー(内部コンポーネントなし)またはコンポジット(内部コンポーネントあり)のいずれかです。
例
例3-11 スカラー変数の宣言
この例では、いくつかの変数をスカラー・データ型で宣言しています。
DECLARE part_number NUMBER(6); part_name VARCHAR2(20); in_stock BOOLEAN; part_price NUMBER(6,2); part_description VARCHAR2(50); BEGIN NULL; END; /
関連トピック
-
スカラー変数の宣言の構文は、「スカラー変数の宣言」を参照してください
-
スカラーのデータ型の詳細は、「PL/SQLのデータ型」を参照してください
-
コンポジット・データ型およびコンポジット変数の詳細は、「PL/SQLのコレクションおよびレコード」を参照してください
定数の宣言
定数は、変更されない値を保持します。
「変数の宣言」の内容は定数の宣言にも当てはまりますが、定数の宣言には必要なものがさらに2つ(キーワードCONSTANT
と定数の初期値)あります。(定数の初期値は永続的な値になります。)
例3-12 定数の宣言
この例では、3つの定数をスカラー・データ型で宣言しています。
DECLARE credit_limit CONSTANT REAL := 5000.00; max_days_in_year CONSTANT INTEGER := 366; urban_legend CONSTANT BOOLEAN := FALSE; BEGIN NULL; END; /
関連トピック
-
定数の宣言の構文は、「定数の宣言」を参照してください
変数および定数の初期値
変数宣言では、NOT
NULL
制約を指定しないかぎり、初期値はオプションです。定数の宣言では、初期値は必須です。
ブロックまたはサブプログラムに宣言が含まれている場合は、ブロックまたはサブプログラムに制御が渡されるたびに、変数または定数に初期値が代入されます。宣言がパッケージ仕様部にある場合は、(変数または定数がパブリックかプライベートかには関係なく)セッションごとに初期値が変数または定数に代入されます。
初期値を指定するには、代入演算子(:=
)またはキーワードDEFAULT
を使用し、その後に式を指定します。式には、事前に宣言済の定数と、事前に初期化済の変数を使用できます。
変数に初期値を指定しない場合は、他のコンテキストで使用する前に、値を代入します。
例
例3-13 初期値が指定された変数および定数の宣言
この例では、宣言する定数および変数に初期値を代入します。area
の初期値は、事前に宣言済の定数pi
および事前に初期化済の変数radius
に応じて異なります。
DECLARE hours_worked INTEGER := 40; employee_count INTEGER := 0; pi CONSTANT REAL := 3.14159; radius REAL := 1; area REAL := (pi * radius**2); BEGIN NULL; END; /
例3-14 デフォルトでNULLに初期化される変数
この例では、変数counter
の初期値はデフォルトのNULL
です。この例では、「IS [NOT] NULL演算子」を使用して、NULL
がゼロとは異なることを示しています。
DECLARE counter INTEGER; -- initial value is NULL by default BEGIN counter := counter + 1; -- NULL + 1 is still NULLIF counter IS NULL THEN
DBMS_OUTPUT.PUT_LINE('counter is NULL.');
END IF;
END; /
結果:
counter is NULL.
関連トピック
-
定数の連想配列の宣言の詳細は、「連想配列の定数の宣言」を参照してください
-
定数レコードの宣言の詳細は、「レコード定数の宣言」を参照してください
%TYPE属性を使用した項目の宣言
%TYPE
属性を使用すると、事前に宣言されている変数または列と同じデータ型のデータ項目を(データ型を知らなくても)宣言できます。参照先項目の宣言が変更されると、それに応じて参照元項目の宣言も変更されます。
次に宣言の構文を示します。
referencing_item referenced_item%TYPE;
参照元項目および参照先項目にすることができる項目の種類は、「%TYPE属性」を参照してください。
参照元項目は、参照先項目から次のものを継承します。
-
データ型およびサイズ
-
制約(参照先項目が列である場合を除く)
参照元項目は、参照先項目の初期値は継承しません。そのため、参照元項目でNOT
NULL
制約が指定または継承される場合は、参照元項目の初期値を指定する必要があります。
%TYPE
属性は、データベースの値を保持する変数を宣言する場合に特に便利です。列と同じ型の変数を宣言する構文は、次のようになります。
variable_name table_name.column_name%TYPE;
関連項目:
「%ROWTYPE属性を使用した項目の宣言」(この属性を使用すると、データベースの表またはビュー内の行の全体または一部を表すレコード変数を宣言できます)
例
例3-15 列と同じ型の変数の宣言
この例では、変数surname
は、NOT
NULL
制約が指定されている列employees
.last_name
のデータ型とサイズを継承しています。surname
はNOT
NULL
制約を継承しないため、その宣言に初期値は不要です。
DECLARE surname employees.last_name%TYPE; BEGIN DBMS_OUTPUT.PUT_LINE('surname=' || surname); END; /
結果:
surname=
例3-16 別の変数と同じ型の変数の宣言
この例では、変数surname
は変数name
のデータ型、サイズおよびNOT
NULL
制約を継承しています。surname
はname
の初期値を継承しないため、その宣言には初期値(25文字以内)が必要です。
DECLARE
name VARCHAR(25) NOT NULL := 'Smith';
surname name%TYPE := 'Jones';
BEGIN
DBMS_OUTPUT.PUT_LINE('name=' || name);
DBMS_OUTPUT.PUT_LINE('surname=' || surname);
END;
/
結果:
name=Smith surname=Jones