Oracle SQLで変数を使いこなす!宣言から使い方まで徹底解説
変数の宣言
Oracle SQL スクリプトで変数を宣言するには、DECLARE
キーワードを使用します。変数の宣言には、以下の要素が必要です。
- 変数名: 変数を参照するために使用する名前です。英数字、アンダースコア(_)、ドル記号($)を使用することができます。
- データ型: 変数が格納するデータの型です。NUMBER、VARCHAR2、DATEなどのデータ型を指定することができます。
- オプションの初期値: 変数に初期値を割り当てることができます。
以下の例は、employee_id
という名前の NUMBER データ型の変数を宣言し、初期値を 1234 に設定する方法を示しています。
DECLARE
employee_id NUMBER := 1234;
BEGIN
-- 処理内容
END;
変数の使用
宣言した変数は、SQL ステートメント内で使用することができます。変を参照するには、変数名を直接記述します。
以下の例は、employee_id
変数を使用して、従業員の情報を検索する方法を示しています。
DECLARE
employee_id NUMBER := 1234;
BEGIN
SELECT * FROM employees WHERE employee_id = employee_id;
END;
置換変数は、SQL*Plus スクリプト内で使用する特殊な変数です。置換変数は、スクリプト実行時にユーザーが入力した値で置き換えることができます。
置換変数を宣言するには、DEFINE
コマンドを使用します。DEFINE
コマンドには、変数名と値を指定する必要があります。
DEFINE dept_id = 'D101';
置換変数は、SQL ステートメント内で変数名と同じように使用することができます。
SELECT * FROM employees WHERE department_id = dept_id;
Oracle SQL スクリプトで変数を使用すると、コードをより簡潔で読みやすく、また繰り返し処理を効率化することができます。変数と置換変数を効果的に活用することで、Oracle SQL スクリプトをより効果的に開発することができます。
サンプルコード:従業員情報を検索するスクリプト
-- 従業員IDの入力を求める
DEFINE employee_id = '';
ACCEPT employee_id PROMPT 'Enter employee ID: ';
-- 従業員情報を検索する
DECLARE
cursor emp_cursor IS
SELECT *
FROM employees
WHERE employee_id = employee_id;
emp_record emp_cursor%ROWTYPE;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO emp_record;
IF emp_cursor%FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_record.employee_name);
DBMS_OUTPUT.PUT_LINE('Department ID: ' || emp_record.department_id);
DBMS_OUTPUT.PUT_LINE('Salary: ' || emp_record.salary);
ELSE
DBMS_OUTPUT.PUT_LINE('Employee not found.');
END IF;
CLOSE emp_cursor;
END;
このスクリプトの説明:
- 最初に、
employee_id
という置換変数を宣言し、空の文字列に初期化します。 - 次に、
ACCEPT
コマンドを使用して、ユーザーに従業員IDを入力するように求めます。入力された値はemployee_id
変数に格納されます。 DECLARE
ブロック内で、emp_cursor
という名前のカーソルを宣言します。このカーソルは、employee_id
変数と一致する従業員IDを持つすべてのレコードをemployees
テーブルから検索します。- カーソルを開き、フェッチして
emp_record
変数にレコードを格納します。 IF
ステートメントを使用して、カーソルがレコードを検出したかどうかを確認します。- レコードが見つかった場合、従業員の名前、部門ID、給与を出力します。
- レコードが見つからない場合、「Employee not found.」というメッセージを出力します。
- 最後に、カーソルを閉じます。
- エラー処理を追加して、カーソル操作やデータの取得中にエラーが発生した場合に適切なメッセージを出力できるようにします。
- より多くの従業員情報を出力するようにスクリプトを拡張します。
- WHERE 句に他の条件を追加して、より具体的な検索を実行できるようにします。
このサンプルコードは、Oracle SQL で変数と置換変数を使用してスクリプトを作成する方法を理解するのに役立ちます。
Oracle SQL スクリプトで変数を宣言および使用するその他の方法
パッケージを使用すると、変数、プロシージャ、関数などのオブジェクトをグループ化して、再利用しやすくなります。パッケージ内の変数は、パッケージ内の他のオブジェクトで使用することができます。
パッケージで変数を宣言するには、PACKAGE
キーワードを使用します。変数の宣言は、パッケージの PUBLIC
または PRIVATE
セクション内に配置できます。
以下の例は、employee_id
という名前の変数を宣言するパッケージを示しています。
PACKAGE employee_pkg
IS
-- 変数宣言
employee_id NUMBER := 1234;
END employee_pkg;
パッケージ内の変数は、以下の方法で参照できます。
BEGIN
-- パッケージ変数を使用する
SELECT * FROM employees WHERE employee_id = employee_pkg.employee_id;
END;
プロシージャは、特定のタスクを実行する一連の SQL ステートメントをカプセル化したものです。プロシージャ内で変数を宣言すると、そのプロシージャの実行中にのみ変数がスコープされます。
以下の例は、get_employee_info
という名前のプロシージャを示します。このプロシージャは、従業員の ID を受け取り、その従業員の情報を返すように設計されています。
PROCEDURE get_employee_info (p_employee_id IN NUMBER)
IS
-- 変数宣言
cursor emp_cursor IS
SELECT *
FROM employees
WHERE employee_id = p_employee_id;
emp_record emp_cursor%ROWTYPE;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO emp_record;
IF emp_cursor%FOUND THEN
-- 従業員情報を出力する
ELSE
-- エラー処理
END IF;
CLOSE emp_cursor;
END get_employee_info;
プロシージャ内の変数は、プロシージャのパラメータとして渡すことができます。
以下の例は、get_employee_info
プロシージャを呼び出す方法を示しています。
DECLARE
employee_id NUMBER := 1234;
BEGIN
-- プロシージャを呼び出す
get_employee_info (employee_id);
END;
FUNCTION get_employee_name (p_employee_id IN NUMBER)
RETURN VARCHAR2
IS
-- 変数宣言
cursor emp_cursor IS
SELECT employee_name
FROM employees
WHERE employee_id = p_employee_id;
emp_record emp_cursor%ROWTYPE;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO emp_record;
IF emp_cursor%FOUND THEN
RETURN emp_record.employee_name;
ELSE
RETURN NULL;
END IF;
CLOSE emp_cursor;
END get_employee_name;
SELECT get_employee_name (1234) FROM DUAL;
その他のヒント
- 変数を使用する場合は、わかりやすく意味のある名前を付けましょう。
- 変数のデータ型は、その変数が格納する値の種類と一致するようにする必要があります。
- 変数に初期値を設定すると、後でその値を変更する必要がなくなります。
- 不要になった変数は、明示的に解放するようにしましょう。
これらの追加の方法により、Oracle SQL スクリプトで変数をより柔軟かつ効果的に使用することができます。
Oracle SQL スクリプトで変数を宣言および使用するには、さまざまな方法があります。適切な
sql oracle variables