2. PL/SQLでのデータ処理

 


📝 PL/SQLでデータベースを自在に操ろう! データ処理の基本

PL/SQLを使って、データベースからデータを取り出したり、新しくデータを追加したりする方法を学びます。まるで、PL/SQLという道具を使って、データベースという宝箱を開け閉めするようなものです。


1. データベースからデータを取り出す方法 🎣

SQLでデータを取得するにはSELECT文を使いますが、PL/SQLでは、そのデータを「変数」という箱に入れる必要があります。

1.1. SELECT INTO

データを変数に入れるためには、SELECT文にINTOを追加します。

【構文】SELECT カラム名 INTO 変数名 FROM テーブル名 WHERE 条件;

項目意味
SELECT取得したいカラムを指定します。
INTO取得したデータをどの変数に入れるかを指定します。SELECTで指定したカラムの数と、INTOで指定した変数の数は必ず同じにしてください。
FROMどのテーブルから取得するかを指定します。
WHEREどんな条件でデータを絞り込むかを指定します。

【大切なポイント】 変数に入れるデータのデータ型は、取得元のカラムのデータ型と同じでなければなりません。例えば、文字列のカラムを数値の変数に入れようとするとエラーになります。

例:CUSTOMERテーブルからデータを取得する

SQL
DECLARE
  c_name VARCHAR2(50);
  c_address VARCHAR2(50);
  c_id NUMBER := 10;
BEGIN
  -- CUSTOMERテーブルからデータを取得して変数に格納
  SELECT first_name, country
  INTO c_name, c_address
  FROM customer
  WHERE customer_id = c_id;
  
  -- 変数の中身を表示
  DBMS_OUTPUT.PUT_LINE('名前は' || c_name || 'です。');
  DBMS_OUTPUT.PUT_LINE('国は' || c_address || 'です。');
END;
/

このプログラムを実行すると、customer_id10の顧客のfirst_namecountryがそれぞれc_namec_addressという変数に格納され、画面に表示されます。


2. データ型は「%TYPE」を使うのがベスト! 👍

前の例では、変数をVARCHAR2(50)NUMBERと直接宣言しました。しかし、もっと良い方法があります。それが「%TYPE」です。

テーブル名.カラム名%TYPE

%TYPEを使うと、取得元のカラムのデータ型と長さを自動的に引き継いでくれます

VARCHAR2(50)と直接書く場合CUSTOMER.FIRST_NAME%TYPEと書く場合
DECLARE c_name VARCHAR2(50);DECLARE c_name CUSTOMER.FIRST_NAME%TYPE;
VARCHAR2の長さを変えるとき、コードを修正する必要があるVARCHAR2の長さを変えても、コードの修正は不要

【なぜ%TYPEが良いのか?】 もし、将来データベースのテーブルのカラムの長さやデータ型が変わっても、PL/SQLのコードを直す必要がなくなります。これを「アプリケーションの独立性」と呼びます。

今後は、変数を宣言するときは%TYPEを使うように心がけましょう。


3. PL/SQLでテーブルにデータを追加する 💾

次に、PL/SQLを使ってテーブルに新しいデータを追加する方法を学びます。

3.1. INSERT

データベースにデータを挿入するには、おなじみのINSERT文を使います。

【構文】INSERT INTO テーブル名 (カラム1, カラム2, ...)VALUES (値1, 値2, ...);

PL/SQLでは、VALUESに入れる値を変数」にすることで、動的にデータを追加できます。

【手順】

  1. DECLAREブロックで、挿入したいデータの数だけ変数を宣言します。

    • 💡ここでも%TYPEを使いましょう!

  2. BEGINブロックで、INSERT文を書きます。VALUESには、先ほど宣言した変数を指定します。

  3. INSERT文を実行したら、必ずCOMMIT文を実行して、データベースへの変更を確定させます。

例:CUSTOMERテーブルに新しい顧客を追加する

SQL
DECLARE
  c_id CUSTOMER.CUSTOMER_ID%TYPE := 13;
  c_fname CUSTOMER.FIRST_NAME%TYPE := 'ジェフ';
  c_lname CUSTOMER.LAST_NAME%TYPE := 'ベゾス';
  -- 他にも必要な変数を宣言...
BEGIN
  -- CUSTOMERテーブルにデータを挿入
  INSERT INTO CUSTOMER (CUSTOMER_ID, FIRST_NAME, LAST_NAME, ...)
  VALUES (c_id, c_fname, c_lname, ...);

  -- 変更を確定させる
  COMMIT;
  
  -- 挿入が成功したことを表示
  DBMS_OUTPUT.PUT_LINE('データは正常に挿入されました。');
END;
/

このプログラムを実行すると、CUSTOMERテーブルにID13の新しいレコードが追加されます。c_idc_fnameの値を変更して何度も実行すれば、簡単に複数のデータを挿入できます。

これが、PL/SQLを使った基本的なデータ処理方法です。

前の記事:1. PL/SQL入門

次の記事:3. PL/SQL ブロック