変数を宣言した後、さまざまな方法で変数に値を代入できます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
変数に値を代入する方法は以下のとおりです:
割り当て文を使用して、変数に式の値を指定します。
SELECT INTOまたはFETCH文を使用して、変数に値を代入します。変数を
OUTまたはIN OUTパラメータとしてサブプログラムに渡し、サブプログラム内で変数に値を代入します。
変数と値のデータ型は互換性が必要です。あるデータ型が別のデータ型へ暗黙的に変換可能であれば、その2つのデータ型は互換性があることを意味します。
赋値文を使用して変数に値を代入する
変数を宣言した後、代入文を使用して変数に式の値を指定できます。
PLは := を使用して代入操作を行います。構文は以下のとおりです:
variable := expression ;
ここで、variable はPL変数、expression はPL式です。
例:代入文を使用して変数に値を代入します。
obclient> DECLARE
pi CONSTANT NUMBER := 3.14159;
radius NUMBER NOT NULL := 1;
area NUMBER := (pi * radius**2);
BEGIN
DBMS_OUTPUT.PUT_LINE('The area of the circle is '||area);
END;
/
Query OK, 0 rows affected
The area of the circle is 3.14159
この例では、変数 pi、radius、area を宣言し、pi と radius の初期値を指定します。次に、代入文を使用して変数 area に式の値を指定します。
SELECT INTOステートメントを使用して変数に値を代入する
SELECT INTO ステートメントを使用すると、変数に直接値を代入できます。SELECT INTO ステートメントを実行するたびに値が代入されるため、代入される変数の型は SELECT の列と一対一で対応している必要があります。
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 ステートメントを使用して変数に値を代入します。
obclient> CREATE TABLE employees(
employee_id NUMBER(4,0),
name VARCHAR(10),
salary NUMBER(7,2)
);
Query OK, 0 rows affected
obclient> INSERT INTO employees (employee_id,name,salary)VALUES(105,'Sam Smith',15000);
Query OK, 1 row affected
obclient> DECLARE
emp_id employees.employee_id%TYPE :=105;
emp_name employees.name%TYPE;
wages employees.salary%TYPE;
BEGIN
SELECT name, NVL(salary,0) INTO emp_name, wages
FROM employees WHERE employee_id = emp_id;
DBMS_OUTPUT.PUT_LINE(emp_name||'----'||to_char(wages));
END;
/
Query OK, 0 rows affected
Sam Smith----15000
変数への代入としてサブプログラムのパラメータとして使用する
変数を OUT または IN OUT パラメータとしてサブプログラムに渡し、サブプログラムがそのパラメータに値を代入した場合、その変数はサブプログラムの実行終了後もその値を保持します。
例:変数への代入としてサブプログラムのパラメータとして使用する。
obclient> DECLARE
wages employees.salary%TYPE;
PROCEDURE new_salary (
emp_id employees.employee_id%TYPE :=105,
salary IN OUT NUMBER,
add_salary NUMBER
) IS
BEGIN
salary := salary + add_salary;
END;
BEGIN
SELECT salary INTO wages
FROM employees
WHERE employee_id = 105;
DBMS_OUTPUT.PUT_LINE
('The original wages is ' || wages);
new_salary (105, wages, 1000);--procedureを呼び出す
DBMS_OUTPUT.PUT_LINE
('The new wages is ' || wages);
END;
/
Query OK, 0 rows affected
The original wages is 15000 --procedureを呼び出す前
The new wages is 16000 --procedureを呼び出した後
BOOLEAN型変数への代入
ブール値(BOOLEAN)は論理演算をサポートしており、BOOLEAN 型変数には TRUE、FALSE、NULL のみを代入できます。
例:BOOLEAN 型変数に代入する。
obclient> DECLARE
done BOOLEAN; --初期値はデフォルトで NULL
BEGIN
done := FALSE; --文字列表現の値を指定する
WHILE NOT done LOOP
Null;
done := TRUE;
END LOOP;
END;
/