2.6 変数への値の代入
変数を宣言した後、次の方法でその変数に値を代入できます。
-
代入文を使用して式の値を代入する方法。
-
SELECTINTO文またはFETCH文を使用して、表の値を割り当てます。 -
OUTパラメータまたはINOUTパラメータとしてサブプログラムに渡し、サブプログラム内で値を代入する方法。
変数と値のデータ型には、互換性が必要です。あるデータ型を暗黙的に別のデータ型に変換できる場合、この2つのデータ型には互換性があります。暗黙的なデータ変換の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
ここでのトピック
2.6.1 代入文を使用した変数への値の代入
式の値を変数に代入するには、次の形式の代入文を使用します。
variable_name := expression;
代入文の構文の詳細は、「代入文」を参照してください。
式の構文は、「式」を参照してください。
例2-24 代入文を使用した変数への値の代入
この例では、複数の変数を宣言(一部には初期値も指定)してから、代入文を使用して式の値を変数に代入します。
DECLARE -- You can assign initial values here
wages NUMBER;
hours_worked NUMBER := 40;
hourly_salary NUMBER := 22.50;
bonus NUMBER := 150;
country VARCHAR2(128);
counter NUMBER := 0;
done BOOLEAN;
valid_id BOOLEAN;
emp_rec1 employees%ROWTYPE;
emp_rec2 employees%ROWTYPE;
TYPE commissions IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
comm_tab commissions;
BEGIN -- You can assign values here too
wages := (hours_worked * hourly_salary) + bonus;
country := 'France';
country := UPPER('Canada');
done := (counter > 100);
valid_id := TRUE;
emp_rec1.first_name := 'Antonio';
emp_rec1.last_name := 'Ortiz';
emp_rec1 := emp_rec2;
comm_tab(5) := 20000 * 0.15;
END;
/2.6.2 SELECT INTO文を使用した変数への値の代入
SELECT INTO文の単純な形式は次のとおりです。
SELECT select_item [, select_item ]... INTO variable_name [, variable_name ]... FROM table_name;
それぞれのselect_itemに、対応する型互換性のあるvariable_nameが必要です。SQLにはBOOLEAN型がないため、variable_nameはBOOLEAN変数にはできません。
SELECT INTO文の構文の詳細は、「SELECT INTO文」を参照してください。
例2-25 SELECT INTO文を使用した変数への値の代入
この例では、SELECT INTO文を使用して、employee_idが100である従業員の給与の10%にあたる値を変数bonusに代入します。
DECLARE bonus NUMBER(8,2); BEGIN SELECT salary * 0.10 INTO bonus FROM employees WHERE employee_id = 100; END; DBMS_OUTPUT.PUT_LINE('bonus = ' || TO_CHAR(bonus)); /
結果:
bonus = 2400
2.6.3 サブプログラムのパラメータとしての変数への値の代入
変数をOUTパラメータまたはIN OUTパラメータとしてサブプログラムに渡し、サブプログラムによってこれらのパラメータに値が代入される場合は、サブプログラムの実行後、その値が変数で保持されます。詳細は、「サブプログラム・パラメータ」を参照してください。
例2-26 IN OUTサブプログラム・パラメータとしての変数への値の代入
この例では、変数new_salをプロシージャadjust_salaryに渡します。このプロシージャによって、対応する仮パラメータsalに値が代入されます。salはIN OUTパラメータであるため、プロシージャの実行終了後、代入された値が変数new_salで保持されます。
DECLARE
emp_salary NUMBER(8,2);
PROCEDURE adjust_salary (
emp NUMBER,
sal IN OUT NUMBER,
adjustment NUMBER
) IS
BEGIN
sal := sal + adjustment;
END;
BEGIN
SELECT salary INTO emp_salary
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE
('Before invoking procedure, emp_salary: ' || emp_salary);
adjust_salary (100, emp_salary, 1000);
DBMS_OUTPUT.PUT_LINE
('After invoking procedure, emp_salary: ' || emp_salary);
END;
/
結果:
Before invoking procedure, emp_salary: 24000 After invoking procedure, emp_salary: 25000
2.6.4 ブール変数への値の代入
BOOLEAN変数に代入できる値は、TRUE、FALSEおよびNULLのみです。
BOOLEANデータ型の詳細は、「ブール・データ型」を参照してください。
例2-27 BOOLEAN変数への値の代入
この例では、BOOLEAN変数doneをデフォルトでNULLに初期化し、リテラル値FALSEを代入して、リテラル値TRUEと比較し、BOOLEAN式の値を代入します。
DECLARE done BOOLEAN; -- Initial value is NULL by default counter NUMBER := 0; BEGIN done := FALSE; -- Assign literal value WHILE done != TRUE -- Compare to literal value LOOP counter := counter + 1; done := (counter > 500); -- Assign value of BOOLEAN expression END LOOP; END; /