PL/SQLでカーソルを使う(応用編):超入門「PL/SQL」(7)(1/3 ページ)
本連載は、「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用するための実践講座です。前回に引き続き、今回は「カーソル」の応用について解説します。
目次
本連載は、Oracle Database向けにデータベース言語 SQL(Structured Query Language)を拡張したプログラミング言語である「PL/SQL(Procedure Language/Structured Query Language)」を理解し、活用するための実践講座です。SQLは知っているけれど、OracleでのPL/SQLは初めてという人向けに、機能の概要と具体的な書き方を解説します。
PL/SQLはOracleが開発したプログラミング言語であるため、Oracle Databaseに格納されているデータを効率的に処理できるという利点があります。SELECT文によって取得した行データをPL/SQLの変数に代入して処理したい場合は、「カーソル」機能を使用します。カーソルを使用するには一連の指定が必要になるため、前回の基礎編と今回の応用編の2回に分けて解説しています。カーソルはPL/SQLの中でも非常に重要な機能です。しっかり押さえておきましょう。
カーソルFORループ
カーソル処理では複数のステップを指定する必要があるため、少し複雑に感じられる方もいるかもしれません。しかし、「カーソルFORループ」を使用すると、幾つかの処理を自動化でき、PL/SQLブロックを単純化できます。
まずは、以下のサンプルプログラムで通常のカーソル処理と、カーソルFORループを使用したカーソル処理を見比べてみましょう。
DECLARE CURSOR dept_cur IS SELECT * FROM dept; dept_rec dept_cur%ROWTYPE; BEGIN OPEN dept_cur; LOOP FETCH dept_cur INTO dept_rec; EXIT WHEN dept_cur%NOTFOUND; DBMS_OUTPUT.PUT_LINE(dept_rec.deptno||' : '||dept_rec.dname||' : '||dept_rec.loc); END LOOP; CLOSE dept_cur; END; /
DECLARE CURSOR dept_cur IS SELECT * FROM dept; BEGIN FOR dept_rec IN dept_cur LOOP DBMS_OUTPUT.PUT_LINE(dept_rec.deptno||' : '||dept_rec.dname||' : '||dept_rec.loc); END LOOP; END; /
カーソルFORループの特徴と書式
カーソルFORループを使用すればシンプルに記述できることが分かります。それでは具体的にどのような特徴があるのかを解説します。
- カーソルのオープン、クローズの自動実行:OPEN文とCLOSE文を内部的に自動実行します
- 変数を暗黙的に定義:通常はFETCH INTO文で取り出した行データを代入するため、「カーソル名%ROWTYPE」で変数を定義しておく必要があります。しかし、カーソルFORループでは、「ループ索引」と呼ばれる変数が「カーソル名%ROWTYPE」で暗黙的に定義されます。ループ索引の詳細は後ほど紹介する書式で解説します
- ループ索引への代入を自動実行:結果セットから1行を取り出し、前述のループ索引に暗黙的に代入します。LOOP処理によって結果セットの行が上から順に取り出されていき、全ての行が取り出されると自動的にLOOP処理が終了します。その後、前述の通りカーソルを自動的にクローズします
それでは次の書式で記述方法を確認しましょう。
FOR <ループ索引名> IN <カーソル名> LOOP 処理文 ; END LOOP ;
FOR句の後のループ索引が暗黙的に「カーソル名%ROWTYPE」の変数として定義されます。そして、カーソルを自動的にオープンし、ループ索引に1行ずつ代入していきます。
代入された値は「<ループ索引名>.<フィールド名>」で参照できます。ただし、ループ索引はカーソルFORループ内(FOR 〜 END LOOPまで)でのみ参照可能なため注意が必要です。
このようにカーソルFORループは、カーソル処理の記述を単純化できます。そのため、結果セットの全ての行を処理したい場合はお勧めです。
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対応版】