PL/SQLでカーソルを使う(応用編)超入門「PL/SQL」(7)(3/3 ページ)

» 2018年12月20日 05時00分 公開
[小笠原宏幸@IT]
前のページへ 1|2|3       

SELECT INTO文

 最後に紹介する処理は、カーソル処理ではありません。しかし、カーソルと同じように、表から取り出した行データを変数に代入して処理したい場合に使用できる機能です。

 SELECT INTO文は、取り出すデータが1行だけの場合に使用できます。検索データが複数行、または1行も検索されない場合は例外が発生します(例外とはエラーのことです。この後の連載で詳しく解説します)。

 SELECT INTO文はカーソル処理と比べてシンプルに記述できるという利点があります。それでは書式を見ていきましょう。

SELECT 列名 [ ,列名 ] INTO 変数名 [ ,変数名 ] FROM 表名 ;
SELECT INTO文の書式

 SELECT句の後に表から取り出す列を指定します。INTO句には取り出した列データを代入する変数を指定します。このとき、以下の図1のように列と変数は位置で対応している点に注意してください。さらに、対応する列と変数のデータ型が同じでなければなりません。

図1 SELECT INTO文の指定

SELECT INTO文のサンプルプログラムと特徴

 では、SELECT INTO文を使用したサンプルプログラムを見てみましょう。

SQL> DECLARE
  2    e_name    emp.ename%TYPE;
  3    e_deptno  emp.deptno%TYPE;
  4  BEGIN
  5    SELECT ename,deptno INTO e_name,e_deptno FROM emp
  6    WHERE  empno = 7788;
  7      DBMS_OUTPUT.PUT_LINE(e_name||':'||e_deptno);
  8  END;
  9  /
SCOTT:20
SELECT INTO文を使用したサンプルプログラム

 このプログラムでは、EMP表のENAME列とDEPTNO列を取り出して変数に代入し、変数に代入されている値をDBMS_OUTPUT.PUT_LINEで表示します。

 まず宣言部で、取り出す列に対応する変数を%TYPE属性で指定しています。その後、実行部でSELECT INTO文によって値を代入しています。SELECT句で取り出すENAME列とDEPTNO列を指定し、INTO句で代入先の変数をSELECT句の順番に合わせて指定しています。

 SELECT INTO文は1行のみの検索でなければならないため、WHERE句による行の絞り込みを行っています(EMPNO列は主キーとします)。

 サンプルプログラムを見ても分かる通り、SELECT INTO文は非常にシンプルな指定で使用できます。しかし、忘れてならないのは、表から検索するデータは1行でないといけないという点です。そのため、使用できるケースは主に以下のような場合に限られます。

  • WHERE句で主キー(PRIMARY KEY制約を定義している列)を指定している
  • MAX関数、COUNT関数などのグループ関数を使用している

 このように、記述がシンプルな反面、表から取り出すデータが1行でなければなりません。そのため、検索するデータが何行なのか分からない場合はカーソルを使用します。

 以上、前回と今回の2回にわたって表から取り出したデータを扱う方法を紹介しました。特にカーソルに関しては、多くのシーンで使用する可能性が高い機能です。指定がやや複雑であるという側面はありますが、この機会にしっかりと習得しておきましょう。

筆者紹介

小笠原宏幸(おがさわら ひろゆき)

株式会社アシスト データベース技術本部所属。普段はOracle、PostgreSQL、JP1などの分野で研修講師を担当。また、書籍「SQL逆引き大全363の極意」(株式会社秀和システム)をはじめ、「これならわかるOracle超入門教室」(株式会社翔泳社)、「プロとしてのPL/SQL入門」(SBクリエイティブ株式会社)の共著も担当。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。