第6回:ストアドプロシージャ (1/3)

徹底比較!! PostgreSQL vs MySQLパート2
徹底比較!! PostgreSQL vs MySQLパート2

第6回:ストアドプロシージャ
著者:NTTデータ   藤塚 勤也   2007/7/25
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()というユーザ定義関数は以下のような様々な呼び出し方できます。

psql>SELECT sample() FROM TABLE;
SELECT文のSELECTリスト内で呼び出す

psql>SELECT COLUMN FROM sample();
SELECT文のFROM句内で呼び出す

psql>SELECT COLUMN FROM TABLE WHERE COLUMN = sample();
SELECT文のWHERE句内で呼び出す

psql>INSERT INTO TABLE (COLUMN) VALUES (sample());
INSERT文のVALUES句内で呼び出す

表1:ユーザ定義関数の呼び出し例

1   2  3  次のページ


NTTデータ 藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第6回:ストアドプロシージャ
今はMySQLでもストアドプロシージャが使える!
 MySQLのストアドプロシージャ
 PostgreSQLのユーザ定義関数とMySQLのストアドファンクションの相違
徹底比較!! PostgreSQL vs MySQLパート2
第1回同じようで違うデータ型
第2回拡張部分によって違いがでてくるSQL文
第3回実は差があるキャラクターセットの違い
第4回PostgreSQLとMySQLに対応したGUIツールを使いこなす
第5回バックアップとリストア
第6回ストアドプロシージャ
第7回トリガ
第8回それぞれが持つビュー機能

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30