Perl で読みやすい SQL 文を作る

perl で読みやすくSQL 文を作る時の例をご紹介します。

SQL 文コーディングの際の通常の問題点

SQL文、例えば insert 文は以下のような文法になります。

insert into TABLENAME ( COL_NAME1, COL_NAME2, COL_NAME3 )
values ( VALUE1, VALUE2, VALUE3 );

大文字の部分に、それぞれ指定する文字列などが入ります。

perl スクリプトの中でSQL文を作る時に問題になるのが、カンマの扱いです。
SQL文の場合、最後の要素の後や最初の要素の前にカンマがあるとエラーになるので、以下のようなコードは、SQL文の作成には使えません。最後の要素の後にカンマが付いてしまうからです。

$sql = "insert into TABLENAME ( ";
foreach (keys %insertval) {
     $sql .= "$_ , ";
}
$sql .= ")";

#以下省略

また、insert 文については、カラム名の指定順と対応する値の順番が一致していなければならないので、配列の join で 対応しようとすると、カラム名と 対応する値を同じ順番で格納した配列が一つづつ、合計2つ必要になります。

そんなことをするくらいだったら、以下のように全部書いた方が早いかも知れません。

$sql =<< "SQL";
insert into TABLENAME ( COL_NAME1, COL_NAME2, COL_NAME3 )
values ( $value1, $value2, $value3 );
SQL

これも一つの方法ですが、カラム数が多くなると、変更の時などにカラム名と値の対応をチェックするのが大変です。