変数への値の代入
変数を宣言した後、次の方法でその変数に値を代入できます。
-
代入文を使用して式の値を代入する方法。
-
SELECT
INTO
文またはFETCH
文を使用して、表の値を割り当てます。 -
OUT
パラメータまたはIN
OUT
パラメータとしてサブプログラムに渡し、サブプログラム内で値を代入する方法。
変数と値のデータ型には、互換性が必要です。あるデータ型を暗黙的に別のデータ型に変換できる場合、この2つのデータ型には互換性があります。暗黙的なデータ変換の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
ここでのトピック
代入文を使用した変数への値の代入
式の値を変数に代入するには、次の形式の代入文を使用します。
variable_name := expression;
代入文の構文の詳細は、「代入文」を参照してください。
式の構文は、「式」を参照してください。
例3-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; /
SELECT INTO文を使用した変数への値の代入
SELECT
INTO
文の単純な形式は次のとおりです。
SELECT select_item [, select_item ]... INTO variable_name [, variable_name ]... FROM table_name;
それぞれのselect_item
に、対応する型互換性のあるvariable_name
が必要です。
SELECT
INTO
文の構文の詳細は、「SELECT INTO文」を参照してください。
例3-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; DBMS_OUTPUT.PUT_LINE('bonus = ' || TO_CHAR(bonus)); END; /
結果:
bonus = 2400
サブプログラムのパラメータとしての変数への値の代入
変数をOUT
パラメータまたはIN
OUT
パラメータとしてサブプログラムに渡し、サブプログラムによってこれらのパラメータに値が代入される場合は、サブプログラムの実行後、その値が変数で保持されます。詳細は、「サブプログラム・パラメータ」を参照してください。
例3-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
ブール変数への値の代入
BOOLEAN
変数に代入できる値は、TRUE
、FALSE
およびNULL
のみです。
BOOLEAN
データ型の詳細は、「ブール・データ型」を参照してください。
例3-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; /