2012-09-18

perl SQL::Makerはスゲー便利 その2

http://anond.hatelabo.jp/20120917013417 の続き。

前回は、使ってるモジュールしか書かなかったんで、具体的な使い方を、

my $condition = SQL::Maker::Condition->new;

$condition->add('colom1' => "$value1");                          # colum1 = $value1
$condition->add('colom2',{'like' => "%$value2%"});               # colum2 like '%$value1%'
$condition->add('colom3',{'between' => ["$value3","$value4"]});  # colom3 between $value3 and $value4

my $q = SQL::Maker::Select->new(driver => 'XXXXX');              # XXXXXは、MySQL等の指定をする

# where句に条件を設定
$q->set_where($condition);                                       

# where句を抽出select項目やテーブルの指定を全くしてないので、$sql_conditionには
# "FROM WHERE (colum1 = ?) and (colom2 like ?) and (colom3 between ? and ?)" という文字列がセット
my $sql_condition = $q->as_sql();                                

# "FROM" を消して、WHERE句だけにする 
$sql_condition =~ s/FROM//;                                      

# 設定した条件の配列
my @binds = $q->bind;                                            

# SQLの読み込み(条件部分をのぞくopen my $fh, "<", "./sql.txt";
my $sql = do{ local $/; <$fh>};
close $fh;

# 生成したWHERE句とソート順をSQLに追加
$sql = $sql.$sql_condition;

# コネクションを取得
my $conection = DBI->connect($datasource) or die ( 'could not connect' );
my $sth = $conection->prepare($sql);

# 条件に値を埋め込む
for(my $i = 0; $i<= $#binds; $i++){
    $sth->bind_param($i+1,$binds[$i]);
}

# SQLの実行
$sth->execute;


という形でやってます

増田だとpre記法でも「<」「>」が正しく変換されないんで、読み替えてください。

やろうと思えば、select項目や読み込むテーブルもPGの中で指定して組み立てることも

出来るんだけど、そこまでやると面倒くさいし、そこまで動的にコントロールする必要

サイトでは無かったんで、条件部分のみ動的に変更できるようにしてます

動的SQLperlで作ろうと思っている人の参考になれば幸いです。

参考

http://search.cpan.org/~chiba/SQL-Maker/lib/SQL/Maker/Select.pm

http://search.cpan.org/~chiba/SQL-Maker/lib/SQL/Maker/Condition.pm

風俗口コミ横断SEARCH

http://fko-s.info/index.html

記事への反応 -

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん