|
||||||||||||||||||
| 1 2 3 次のページ | ||||||||||||||||||
| 今はMySQLでもストアドプロシージャが使える! | ||||||||||||||||||
|
データベースを扱うアプリケーションといった場合、データベースサーバに対してクライアントの位置づけで動作するものを意味することが多いと思います。今回取り上げる「ストアドプロシージャ」もデータベースを扱うアプリケーションの一種ですが、クライアントの位置づけではなく、データベースサーバ内で動作するものという違いがあります。 MySQLはバージョン5.0をリリースするまでは、このストアドプロシージャを使用することができませんでした。よって、PostgreSQLとMySQLを比較すると、必ず「PostgreSQLではストアドプロシージャを使用できるが、MySQLではできない」といわれてきました。しかし今ではPostgreSQL、MySQLともにストアドプロシージャに関して十分な機能を有しています。 今回は、このストアドプロシージャを取り上げ、それぞれのRDBMSでの違いなどを説明します。ストアドプロシージャを作成するための文法レベルの詳細な差異までの説明は行いませんが、PostgreSQLとMySQLでのストアドプロシージャに関して大まかな違いをつかんでいただければ幸いです。 |
||||||||||||||||||
| ファンクションとプロシージャー | ||||||||||||||||||
|
ストアドプロシージャには「ストアドファンクション」と「ストアドプロシージャ」の2種類の処理形態があります。通常、この2つを総称してストアドプロシージャと呼んでいます。 PostgreSQLでは、ストアドプロシージャ相当の機能を「ユーザ定義関数」と呼んでいます。ユーザ定義関数で作成できるのは、「CREATE FUNCTION」文によるストアドファンクションのみですが、ストアドプロシージャの機能も完全に包含しているといってよいと思います。 MySQLでは、「CREATE FUNCTION」文にて作成するストアドファンクションと「CREATE PROCEDURE」文にて作成するストアドプロシージャを明確に分けて提供しています。 |
||||||||||||||||||
| PostgreSQLのストアドプロシージャ | ||||||||||||||||||
|
PostgreSQLのストアドプロシージャの最大の特徴は、様々なプログラミング言語から、その処理を記述できる点です。ユーザ定義関数を作成できるプログラミング言語としては、SQLはもちろんのこと、C言語やいくつかの手続き言語が使用できます。 この手続き言語には、標準配布のものとしてPL/pgSQL、PL/Tcl、PL/Perl、PL/Pythonがあります。標準配布内には含まれませんが、Javaでユーザ定義関数を作成できるPL/Javaなどもあります。 Oracleには「PL/SQL」という、非常に有名なストアドプロシージャ開発用のプログラミング言語があります。PostgreSQLのPL/pgSQLは、このOracleのPL/SQLと完全互換ではありませんが、PL/SQLと同じようにSQLに様々な拡張仕様を追加したプログラミング言語です。 作成したユーザ定義関数は、SELECT文などのSQL文の中から呼び出すことができます。例えば、sample()というユーザ定義関数は以下のような様々な呼び出し方できます。
表1:ユーザ定義関数の呼び出し例 |
||||||||||||||||||
|
1 2 3 次のページ |
||||||||||||||||||
|
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||

