PL/SQL - 変数:入門ガイド

こんにちは、未来のPL/SQL魔法使いたち!今日は、PL/SQLの変数の世界への興味深い旅に出発します。プログラミングが初めてであっても心配しないでください。あなたの親切なガイドとして、私はステップバイステップで説明します。このチュートリアルの終わりには、プロのように変数を弄ぶことができるでしょう!

PL/SQL - Variables

変数とは何か?

まず、変数とは何かを理解しましょう。変数は、コンピュータのメモリ内にある小さなコンテナで、データを保持します。部屋の中で異なる種類のアイテムを異なる箱に収納するのと同じように、私たちはプログラム内で異なる種類のデータを保持するために変数を使用します。

PL/SQLにおける変数の宣言

PL/SQLでは、変数を宣言するのは、新しく知り合う人に自分を紹介するのと同じです。プログラムに「僕(私)はここにいて、これを保持できるんだよ!」と伝えます。

基本構文

PL/SQLで変数を宣言する基本的な構文は以下の通りです:

変数名 データ型;

以下のように分解します:

  • 変数名 は、あなたが選んだ変数の名前
  • データ型 は、変数が保持できるデータの種類

DECLARE
my_name VARCHAR2(50);
my_age NUMBER;
is_student BOOLEAN;
BEGIN
-- ここにコードを記述
END;

この例では:

  • my_name は最大50文字を保持できます
  • my_age は数値を保持できます
  • is_student は TRUE または FALSE を保持できます

PL/SQLでは、変数は DECLARE セクションで宣言し、BEGIN 文の前に置きます。

一般的なデータ型

以下は、よく遭遇するデータ型の一覧です:

データ型 説明
VARCHAR2 可変長文字列 'こんにちは, PL/SQL!'
NUMBER 数値 42, 3.14
DATE 日時 '01-JAN-2023'
BOOLEAN 真理値 (TRUE/FALSE) TRUE

PL/SQLにおける変数の初期化

変数を宣言したら、それに値を与えてみましょう。このプロセスは初期化と呼ばれます。

基本的な初期化

変数を宣言する際に初期化することもできます:

DECLARE
greeting VARCHAR2(20) := 'こんにちは, PL/SQL!';
lucky_number NUMBER := 7;
BEGIN
DBMS_OUTPUT.PUT_LINE(greeting);
DBMS_OUTPUT.PUT_LINE('私のラッキーナンバーは: ' || lucky_number);
END;

この例では、私たちはPL/SQLに「こんにちは」と言い、私たちのラッキーナンバーを共有しています。:= は PL/SQLの代入演算子です。

NULLでの初期化

時々、変数を宣言するが値を与えることなく残したい場合があります。その場合、NULLを使用します:

DECLARE
user_input VARCHAR2(100) := NULL;
BEGIN
-- 後でユーザーの入力を取得します
END;

PL/SQLにおける変数のスコープ

変数のスコープは、変数の「近所」とも言えます。変数が見え、使用できる場所を定義します。

ローカル変数

ブロック内で宣言された変数は、そのブロック内にローカルです。ブロックの外からは見えません。

DECLARE
outer_variable VARCHAR2(20) := '私は外側にいます!';
BEGIN
DBMS_OUTPUT.PUT_LINE(outer_variable);

DECLARE
inner_variable VARCHAR2(20) := '私は内側にいます!';
BEGIN
DBMS_OUTPUT.PUT_LINE(outer_variable);  -- これは動作します
DBMS_OUTPUT.PUT_LINE(inner_variable);  -- これはも動作します
END;

DBMS_OUTPUT.PUT_LINE(outer_variable);  -- これは動作します
-- DBMS_OUTPUT.PUT_LINE(inner_variable);  -- これはエラーを引き起こします
END;

この例では、inner_variableは内側のブロックパーティにしか出てこない羞恥の友です。外側のブロックはそれを見ることができません!

グローバル変数

プログラム全体で見えるように変数を宣言したい場合は、最も外側のブロックで宣言します。

DECLARE
global_var NUMBER := 100;

PROCEDURE print_global IS
BEGIN
DBMS_OUTPUT.PUT_LINE('グローバル変数の値: ' || global_var);
END;

BEGIN
print_global;
global_var := global_var + 50;
print_global;
END;

ここで、global_varは人気者のように、誰もが知っており、交流できるものです!

SQLクエリの結果をPL/SQL変数に代入する

PL/SQLの素晴らしい機能の1つは、SQLとシームレスに統合できることです。SQLクエリの結果をPL/SQL変数に代入することができます!

単一行クエリ

DECLARE
employee_name VARCHAR2(100);
employee_salary NUMBER;
BEGIN
SELECT first_name || ' ' || last_name, salary
INTO employee_name, employee_salary
FROM employees
WHERE employee_id = 100;

DBMS_OUTPUT.PUT_LINE('従業員: ' || employee_name);
DBMS_OUTPUT.PUT_LINE('給料: $' || employee_salary);
END;

この例では、employeesテーブルから従業員の名前と給料を取得し、PL/SQL変数に格納しています。

複数行クエリ

複数行の場合、カーソルまたはバルクコレクトを使用する必要があります。以下はバルクコレクトの例です:

DECLARE
TYPE name_table_type IS TABLE OF VARCHAR2(100);
employee_names name_table_type;
BEGIN
SELECT first_name || ' ' || last_name
BULK COLLECT INTO employee_names
FROM employees
WHERE department_id = 60;

FOR i IN 1..employee_names.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('従業員 ' || i || ': ' || employee_names(i));
END LOOP;
END;

このスクリプトは、部署IDが60のすべての従業員の名前を取得し、PL/SQLテーブルに格納します。その後、ループを使用して各名前を表示します。

そして、皆さん!PL/SQL変数の基本から、初期化、スコープ、そしてSQLクエリの結果を変数に格納する方法までをカバーしました。実践が完璧を生むことを忘れずに、これらの概念を試してみてください。

最後に、プログラマーのジョークを少々:プログラマーが仕事を辞めた理由は何か?配列(rais)がもらえなかったからです!?

ハッピーコーディング、そしてあなたの変数が常に良く振る舞うことを祈っています!

Credits: Image by storyset