検索

一連の手続きをカプセル化するストアド・プロシージャ


ストアド・プロシージャの概念

ストアド・プロシージャとは、その名のとおりデータベースに対する一連の手続き(Procedure)をコンパイルして 1つにまとめ、データベース・サーバー側にオブジェクトとして保存(Stored)したものです。この一連の手続きには、さまざまな SQL文に加え、通常の SQL では扱えない入出力のパラメータや、条件分岐や繰り返しといったプログラミング機能を含めることができます(表1)。クライアントは作成されたストアド・プロシージャを呼び出すだけで、事前に登録された一連の処理を何度でも確実に実行することができます。そのため、決められた処理を繰り返し実行する必要がある場合、それをストアド・プロシージャとして登録しておくと非常に便利です。

ストアド・プロシージャにはいくつかの種類がありますが、Teradataデータベースは、SQL をベースにした標準的な SQLストアド・プロシージャに加え、より高度な処理を実現する C/C++/Java をベースにした外部ストアド・プロシージャをサポートしています。いずれのストアド・プロシージャも、CREATE PROCEDURE文によって作成され、CALL文によって容易に実行することができます。

ストアド・プロシージャと埋め込み SQL

SQL とプログラムを組み合わせる方法には、ストアド・プロシージャの他に埋め込みSQL があります。その目的は同じでも、実現方法に違いがあります。埋め込みSQL とは、C、COBOL、PL/I などで作成するプログラムの中に SQL文を埋め込む手法であり、これによってクライアント・アプリケーションの中から SQL を実行することが可能になります。一方のストアド・プロシージャは、SQL文をさまざまな制御文や条件文と組み合わせてコンパイルしたものを Teradataデータベース内に格納します。(図1)

ストアド・プロシージャは、データベース側で処理が行われるため、埋め込みSQL に比べて以下のメリットがあります。

1. パフォーマンスの向上

ストアド・プロシージャは、Teradataデータベース上に最適化された状態で格納され、Teradataシステムの高い性能を活用して実行されるため、優れたパフォーマンスを実現します。また、クライアントからの 1回の CALL文でデータベースに登録されているカプセル化された複数のロジックを実行できますので、ネットワークの通信量が逓減しボトルネックの発生を抑えます。

2. アプリケーション保守性の向上

ストアド・プロシージャでビジネス・ロジックをカプセル化することによって、データベースに対する定型的な処理をアプリケーションから隔離することができます。ビジネス・ロジックを変更する場合は、関連するストアド・プロシージャのみ更新することで対応できるため、アプリケーションの保守性と開発の生産性が向上します。

3.セキュリティの向上

ユーザーがデータ・テーブルに直接アクセスすることを避け、ストアド・プロシージャへのアクセスに制限することで、不用意なデータの削除や情報漏えいを防ぐことが可能になるため、セキュリティが向上します。

4.一貫性のある処理の実行

あらゆるクライアント環境から、データベース内に格納された一貫性のある共通化されたロジックを繰り返して実行できるため、データの不整合や結果のばらつきを防止できます。

外部ストアド・プロシージャ

Teradataデータベースは、SQL をベースにした標準的なストアド・プロシージャに加え、C、C++、または Java で作成する外部ストアド・プロシージャをサポートしています※2。これらの標準的でポピュラーなプログラミング言語を使ってストアド・プロシージャを作成することで、開発者のさまざまなスキルを生かしながらさらに柔軟で高度なロジックをデータベース内で実行することが可能になります(図2)。また、通常の SQLストアド・プロシージャと異なり、外部ストアド・プロシージャは、データベース内部の操作に留まらず、データベース外部のファイルやオペレーティング・システムの入出力呼び出しを発行することも可能です。そのため、他のデータベースや外部アプリケーションとの連携など、その活用範囲はさらに広がります。

C/C++外部ストアド・プロシージャ

C または C++ プログラミング言語で外部ストアド・プロシージャを作成し、それらをデータベースにインストールし、CALL文を使用して他のストアド・プロシージャと同様に呼び出すことができます。C/C++ 外部ストアド・プロシージャは、CLI※3 を使用して直接 SQL文を実行できるため、非常に複雑で高度な操作に向いています。

Java外部ストアド・プロシージャ

Java はプラットフォームに依存しないオブジェクト指向言語であり、近年その利用者は急速に増加しています。Teradataデータベースでは C やC++ と同様に、汎用性の高い Javaプログラミング言語で外部ストアド・プロシージャを作成し、データベースにインストールすることができます。Java外部ストアド・プロシージャでは、JDBC を使用して SQL文を直接実行できます。

まとめ

ストアド・プロシージャを活用すると、データベースの内部でビジネス・ロジックをカプセル化することが可能になるため、繰り返し実行する必要がある定型的な処理が容易になります。ストアド・プロシージャには、優れたパフォーマンス、アプリケーション保守性の向上、セキュリティの強化など、さまざまなメリットがあります。また、Teradata のストアド・プロシージャは、通常の SQLベースのものに加え、C や C++、あるいは Java といった標準的なプログラミング言語によって作成される外部ストアド・プロシージャもサポートしています。そのため、ビジネスの要件や開発者のスキルに応じて、数多くの選択肢のなかから最良の言語を選んで開発することが可能になります。Teradata システムの卓越したパワーを利用して、柔軟でパフォーマンスに優れたアプリケーション構築が可能になりますので、ストアド・プロシージャを是非ご活用ください。

  • ※1 手続き型言語とは、コンピュータが実行する手順を記述するプログラム言語。 BASIC/C/C++/COBOL/Java/Perl などが相当する。

  • ※2 C/C++外部ストアド・プロシージャは TeradataV2R6.0 からサポート。 Java外部ストアド・プロシージャは Teradata 12.0 からサポート。

  • ※3 CLI(Call Level Interface) とは、アプリケーションとデータベース間のネイティブ・インターフェースを提供する API の集合。