PL/SQLでカーソルを使う(応用編):超入門「PL/SQL」(7)(3/3 ページ)
本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用するための実践講座です。前回に引き続き、今回は「カーソル」の応用について解説します。
SELECT INTO文
最後に紹介する処理は、カーソル処理ではありません。しかし、カーソルと同じように、表から取り出した行データを変数に代入して処理したい場合に使用できる機能です。
SELECT INTO文は、取り出すデータが1行だけの場合に使用できます。検索データが複数行、または1行も検索されない場合は例外が発生します(例外とはエラーのことです。この後の連載で詳しく解説します)。
SELECT INTO文はカーソル処理と比べてシンプルに記述できるという利点があります。それでは書式を見ていきましょう。
SELECT 列名 [ ,列名 ] INTO 変数名 [ ,変数名 ] FROM 表名 ;
SELECT句の後に表から取り出す列を指定します。INTO句には取り出した列データを代入する変数を指定します。このとき、以下の図1のように列と変数は位置で対応している点に注意してください。さらに、対応する列と変数のデータ型が同じでなければなりません。
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
このプログラムでは、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クリエイティブ株式会社)の共著も担当。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- DBエンジンを最大限に生かすバッチアプリの作り方
第1回では、バッチアプリケーションを設計するうえで考慮すべき4つのポイントについて解説しました。今回は、Oracleデータベースを最大限に利用したバッチアプリケーションの実装テクニックについて解説します。 - ODTを使ったVisual StudioからのPL/SQL開発
オラクル社が提供する3つの.NET環境用開発ツール「ODP.NET」「ODT」「ODE.NET」。Oracle 10gリリース2に対応した最新版を使って、Oracleデータベースを前提とした.NETアプリケーションの開発手法を解説する。(編集部) - 更新/挿入/削除のSQLを高速化する3つの技とは?
本連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基本とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局) - 【Oracle Database】忘れていませんか? 「アラートログ調査」に必要な、たった3つのキホン
データベース管理システムの運用でトラブルが発生したらどうするか。データベースサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は基本編として「アラートログの調査で押さえるべき3つのポイント」を解説します。【Oracle Database 12c対応版】