PL/Perlの話
-
Upload
satoshi-hirata -
Category
Technology
-
view
1.682 -
download
0
description
Transcript of PL/Perlの話
PL/Perlの話
2008/09/13株式会社Fusic 平田 哲
自己紹介
平田 哲(id: debility)
・プログラマやってます
・Perl以外にも6つくらい
・最近はPHPが多い
・codecheck.inに参加
はじめに
PL/pgSQL
・SQL手続き言語
・関数定義とかで使う
→ 覚えると結構便利
が
PL/pgSQLは面倒
・配列の概念がない
・記法も当然違う
→ Perlで書けたらいいなあ
そこで
PL/Perlを使ってみた
・楽にインストールできる
・中身は完全にPerl
→ どんな感じになるの?
こんな感じCREATE OR REPLACE FUNCTION get_search_index_words(INTEGER) RETURNS TEXT AS $$
use Encode;
my($search_id) = $_[0];
my $query = “SELECT * FROM house_indos where id = $search_id;”;
my $house_infos_rec = spi_exec_query($query, 1);
my @ret_words_array = ();
# 条件に応じて検索文字列を生成していく・・・return join(“¥t”, @ret_words_array);
# 単数形単語を複数形にする関数sub singularize {
・・・
}
$$ LANGUAGE plperlu;
→ 誰が見てもPerlですね
ざっくりまとめ
PL/Perlのメリット
・Perlそのまま書ける
・モジュールも使える(*)
→ DBの関数作るのが楽になる(*)plperluの場合
注意するところ
plperlとplperlu
・plperl:制限あり
・plperlu:制限なし
→ できる限りはplperlで
気になるところ
パフォーマンスとか
・あくまでPerl
・PL/SQLとの使い分け
→ うまく使い分けましょう
というわけで
→ 今日はこのへんで。
ありがとうございました。
おまけ
PL/Perl↓
SQL手続き言語内でPerl記法を使う
ざっくり逆にする
※あくまでざっくり
Perl内でSQL記法を使う
↓???
そんなのあるわk
あった
Filter::SQLuse DBI; use Filter::SQL; # データベースハンドルを指定Filter::SQL->dbh(DBI->connect('dbi:mysql:test')) or die DBI->errstr;
# テーブルを作ったり消したりEXEC DROP TABLE IF EXISTS t;; EXEC CREATE TABLE t (v INT);;
# 値を挿入for (my $v = 0; $v < 5; $v++) { INSERT INTO t (v) VALUES ($v);;
}
# イテレートして値を表示foreach my $row (SELECT * FROM t;) { print "$row[0]¥n";
}
# 条件分岐if (SELECT ROW COUNT(*) FROM t; == 5) { print "5 rows in table¥n";
h}
→ てことは
PL/Perl内でFilter::SQL使って
なんてことも
すごく意味ないです。
以上です。