【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷


エンタープライズ市場に向かうMySQL 5.0[後編]
 〜 MySQL 5.0のストアドプロシージャをチェック 〜

MySQL 5.0最大の目玉はストアドプロシージャである。インストールした5.0を使って、ストアドプロシージャの動作を試してみよう。(編集局)


鶴長 鎮一
MySQLユーザ会
2004/4/20

ストアドプロシージャを使ってみよう

 MySQL 5.0最大の目玉は、何といってもストアドプロシージャです。この動作を実際に確かめてみましょう。

 例として、以下のサンプルテーブルを用意します。

# mysql -u root

mysql> use test
Database changed
mysql> desc REGION;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| NO    | int(11)     |      | PRI | NULL    | auto_increment |
| AREA  | varchar(50) |      | MUL |         |                |
| PREF  | varchar(50) |      | MUL |         |                |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.03 sec)
mysql> select * from REGION;
+----+----------+----------+
| NO | AREA     | PREF     |
+----+----------+----------+
|  1 | 北海道   | 北海道   |
|  2 | 東北地方 | 福島県   |
(省略)
| 47 | 沖縄諸島 | 沖縄県   |
+----+----------+----------+
47 rows in set (0.00 sec)

 第1フィールドにID、第2フィールドに地域名、第3フィールドに県名を格納します。皆さんも実際に試せるように、テーブルを作成するregion.sqlファイルを用意しました。ダウンロードしてご利用ください。

 データベースは、インストール時に作成されるtestを利用します。

# mysql -u root test < region.sql

最も簡単な例

 最初に、最も簡単な例を見ていきましょう。

mysql> delimiter // 
mysql> CREATE PROCEDURE simpleproc1() 
    -> BEGIN
    ->   SELECT AREA,PREF FROM REGION;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)
注:上記の作業をスクリプト化したsimpleproc1.sqlを用意しました。

 SQLクエリーの最後は「;」を付けますが、ストアドプロシージャを記述する場合、スクリプト中のセンテンスの終了にも「;」を使用するため、区別のためにデリミタ(SQLクエリーの区切り文字)をのようにして変更します。例では「//」としましたが、「|」など、任意の文字で構いません。

 でストアドプロシージャを記述します。例では、ストアドプロシージャ「simpleproc1」を作成しています。ストアドプロシージャの記述については特に言及しません。ストアドプロシージャについては、以下を参照してください。

  参考:
    MySQL社「Stored Procedures and Functions」
http://www.mysql.com/doc/en/Stored_Procedures.html
     
    連載:SQL実践講座(19)〜(23)
http://www.atmarkit.co.jp/fnetwork/rensai/sql19/sql1.html

 simpleproc1は、引数も戻り値もない、最もシンプルな例です。のように呼び出すことで、SELECT AREA,PREF FROM REGIONが実行されます。この際、SQLクエリーの終端が「//」に変更されていることをお忘れなく。クエリーは、のようにして実行します。

mysql> CALL simpleproc1() 
    -> // 
+----------+----------+
| AREA     | PREF     |
+----------+----------+
| 北海道   | 北海道   |
| 東北地方 | 福島県   |
| 東北地方 | 青森県   |
| 東北地方 | 秋田県   |
| 東北地方 | 山形県   |
| 東北地方 | 宮城県   |
| 東北地方 | 岩手県   |
(省略)

戻り値を伴う例

 次に戻り値を伴う例を見てみましょう。先ほどの例では、CALLされた時点でSELECT AREA,PREF FROM REGIONが実行されましたが、今度はCALLで結果を変数に渡し、SELECTで変数の値を引き出します。

mysql> CREATE PROCEDURE simpleproc2(OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM REGION; 
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)
注:上記の作業をスクリプト化したsimpleproc2.sqlを用意しました。

 で、SELECT * INTOクエリーを使用しています。MySQLはSELECT …… INTO TABLEクエリーに対応しておらず、INSERT INTO …… TABLEクエリーを代わりに使用しますが、格納先が変数の場合はSELECT …… INTO 変数クエリーが使用可能です。ここでは、REGIONテーブルの総レコード数を変数param1に引き渡しています。

mysql> CALL simpleproc2(@a) 
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a 
    -> //
+------+
| @a   |
+------+
| 47   |
+------+
1 row in set (0.00 sec)

 でCALLLを実行する際は、戻り値を受け取るローカル変数を指定します。こうすることで、ストアドプロシージャの結果が変数@aに格納されます。@aの値を引き出すには、のようにSELECTクエリーを用います。

前編へ
1/3

Index
エンタープライズ市場に向かうMySQL 5.0[後編]
 〜 MySQL 5.0のストアドプロシージャをチェック 〜
Page 1
ストアドプロシージャを使ってみよう
 最も簡単な例
 戻り値を伴う例
  Page 2
ストアドプロシージャ/ファンクションの動作
 ストアドファンクションの作成
 作成したプロシージャ/ファンクションの確認と削除
  Page 3
MySQL 5.0使用上の注意

Linux Square全記事インデックス


 Linux Squareフォーラム データベース関連記事
連載:快速MySQLでデータベースアプリ!(全11回)
軽快な動作で知られるRDBMS、MySQLでDBアプリの構築を行う。MySQLのインストールに始まり、PerlやRubyなどのスクリプトでデータベースを操作する方法までを完全解説
連載:今から始める MySQL入門(連載中)
定番のLAMP(Linux+Apache+MySQL+PHP)構成でWebアプリケーション開発に挑戦! サンプルアプリの構築を進めながら、基礎知識や操作方法について詳しく解説する
連載:Oracleマイスター養成講座(全6回)
本連載では、Oracleの管理・チューニング方法を紹介していく。これからOracleを始める人、そしてOracleをより深く理解したい人のための、一歩踏み込んだ実用講座
連載:DB2マイスター養成講座(全7回)
本連載では、DB2 UDBの実践的な運用・管理方法を紹介していく。DB2を利用するうえで必要な知識を、実運用を前提にDB2のプロが解説
特集:エンタープライズ市場に向かうMySQL 5.0[前編]
MySQL 5.0の新機能をアルファ版でチェック
1月に公開された5.0アルファ版は大幅に拡張されており、エンタープライズ市場への進出を予感させる
特集:Linuxで動くリレーショナルデータベース・カタログ
データベースサーバのOSとしてLinuxを採用するケースが増えている。Linuxで動作する7つの主なリレーショナルデータベースを紹介する。製品導入の際の参考にしてほしい

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

ホワイトペーパーTechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)



- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  直属上司が海外にいるのエンジニアに見る
【実例】場所に捉われないワークスタイル

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?