変数への値の代入

変数を宣言した後、次の方法でその変数に値を代入できます。

  • 代入文を使用して式の値を代入する方法。

  • 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に値が代入されます。salIN 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変数に代入できる値は、TRUEFALSEおよび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;
/