競馬予想プログラミングに関する記事を「投稿まとめ」で一覧にしてます。この記事は「自動投票」の一覧に含まれてます。一覧の順に読むとステップごとで分かりやすいです。
プロシージャと関数の違い
「プロシージャ」とはSQLで書くプログラムです。SQLは書けるけどプロシージャは経験がないってプログラマーも多いです。決して難しいワケではなく、目的を持って必要なものだけ覚えたら簡単にマスターできるので、ここで学習しましょう。
プロシージャを使うことで思い通りの自動投票が作れます。このプロシージャを使えるのが「PC-KEIBA Database」および「PostgreSQL」の真骨頂です。プロシージャと似たものに「関数」があります。この2つの違いは、
関数(FUNCTION)
(読み: かんすう)
渡した値を何らかの形に加工して返すもの。関数は「ファンクション(FUNCTION)」とも呼ばれます。例えば、PostgreSQLに標準で備わっている汎用的な関数に「to_char」があります。これは数値型や日付型の値を文字列型に変換する関数です。
関数は自作することが出来ます。SQLでも簡単に書けるけど、何度も使える汎用的な処理は関数にすると便利です。例えば、競馬場やトラックを表す「コード」を名称に変換する関数などです。
自作関数の具体的なサンプルは「コード変換関数」の記事を参考にしてください。
また、関数はデータの読み書きをしません。言い換えれば関数内のロジックでテーブルを使いません。物理的にできますが、それは設計を見直したほうが良いです。
プロシージャ(PROCEDURE)
「プロシージャ」とは戻り値が無い関数のイメージです。データの読み書きを目的に作ることが多いです。条件分岐や繰り返し処理を使いながらSQLで書くプログラムです。よくある処理は、SELECT文で得た結果から条件に一致したレコードだけを加工して他のテーブルに登録する、などです。
プロシージャが書けたら関数も書けるようになります。データの読み書きが無いぶん関数のほうが簡単だからです。なので、初心者の方は先にプロシージャを中心に学習することをオススメします。
プロシージャの基本
プロシージャにも関数にもテンプレート的なモノがあってそれを使えば簡単に作れます。目的のSELECT文を書けるようになって、次の4つを覚えたらプロシージャはだいたい作れるようになります。
変数
(読み: へんすう)
「変数」とは何らかの値を一時的に格納しておく「箱」とか「容器」みたいなものです。変数は好きな名前をつけて、どんな型を格納するのか宣言して使います。使えるデータ型は色々ありますが、今はカラムのデータ型と同じ、と思ってください。
ちなみにプロシージャに渡す値を格納する変数を「パラメータ」または「引数(ひきすう)」と呼びます。
条件分岐
- もし~が成立したらAの処理。
- もし~が成立したらBの処理。
- もし~上記以外だったらこの処理。
- 条件分岐の終了。
のように条件によって処理を変えたい場合は「IF~THEN~END IF」を使って処理します。具体的なソースコードはこんな感じです。
繰り返し処理
同じ処理を繰り返す場合に使います。プロシージャの繰り返し処理は書き方がいくつかあるんですが、次のパターンだけ知っておけば良いでしょう。
FOR 変数 IN 数値(開始)..数値(終了) LOOP
/* 何らかの処理 */
END LOOP;
具体的なソースコードはこんな感じです。これは登録頭数や組番など、繰り返しの数が決まってる場合に使います。
カーソル(CURSOR)
「カーソル」のイメージは、SELECT文の結果を変数に保存して繰り返し処理するもの。プロシージャでSELECT文の結果を受けるときはカーソルで処理することが多いです。具体的なソースコードはこんな感じです。カーソルが返すレコードを1行ずつ、すべて読み取るまで繰り返し処理します。