変数を宣言した後、さまざまな方法で変数に値を代入できます。
適用対象
この内容は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;
/