• ベストアンサー

perlからsqlを実行した結果を取り出したい。

perlからsql文を発行し、実行した結果を変数に 格納したいのですが、どうしていいのかわかりません。 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • you_s
  • お礼率40% (6/15)
  • Perl
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

使ったことは無いのですが、ざっとページを眺めてみた感じ、 ・DBI は connect のときに DSN を指定するが、Win32::ODBC はコンストラクタで指定する ・SQL の発行は、DBI は prepare + execute だが、Win32::ODBC は Sql で行なう というふうに、メソッドは全く違います。 詳細に知りたいのであれば、本家(参考URLのふたつめ)に勝るものはないので しょうが、ソースの雰囲気を知りたいということであれば、参考URLのひとつめ なんかどうでしょう? # ちょっと読みにくい (^^; もっと読みにくいんですけど、簡潔なのは http://www.geocities.co.jp/Bookend-Soseki/6187/xiaxiu/pg/4.html かな。

参考URL:
http://www.wao.or.jp/user/matumiya/cgi/docs/Useful/odbc.html,http://www.roth.net/perl/odbc/
you_s
質問者

お礼

http://www.geocities.co.jp/Bookend-Soseki/6187/xiaxiu/pg/4.html」のホームページに掲載されていた、 例文がとても参考になりました! ありがとうございました!

その他の回答 (2)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

追加。 本家本元のサイトの中で "Perl and ODBC Presentation" というページがあります(→参考URL)。 そこの "Using Win32::ODBC in your Perl scripts." の章が簡潔で読みやすいです。

参考URL:
http://www.roth.net/perl/odbc/conf/Home.htm
you_s
質問者

お礼

ご回答ありがとうございます。 早速参照させていただきます。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

ある程度、perl と SQL のそれぞれについての知識がある、という前提で、 参考URL のページは、コンパクトにまとまっていて読みやすいですよ。

参考URL:
http://www.rfs.co.jp/sitebuilder/perl/dbi/
you_s
質問者

補足

参考URL参照しました。 自分が使用しているのは、Win32-ODBCモジュールなのですが、 参考URLではDBIモジュールを使用する例でした。 Win32-ODBCモジュールでも、同じメソッドが使用できるのでしょうか。 もしできないのであれば、Win32-ODBCで同様の操作ができるものを教えてください。 ちなみに、DBIの使用方法が掲載されているホームページはたくさんあるのですが、 Win32-ODBCの使用方法が掲載されているホームページは今現在1つしか見当たりません。(http://member.nifty.ne.jp/hippo2000/perltips/win32odbc.htm) 上記以外の参考URLがありましたら、是非教えてください。 よろしくお願いいたします。

関連するQ&A

  • SQL実行結果取得

    バッチファイルにて、 sqlplusコマンドにより*.sqlファイルを実行し、 SQL文を発行していますが、 実行結果(処理件数)をコマンドプロンプト上 に表示したいのですが、どなたか。手法をご存知では ないでしょうか?

  • PL/SQLで…SQLの実行結果を変数を格納する方法

    毎度お世話になります。 SQL文の実行結果を変数に格納する方法がわからず困っております。 ご存知の方が居られましたらご教示いただきたい所存です。 常に1つの値しか返さないようなSQL文なので 変数V number := 'select count(B列) from B表'; みたいな書き方はで 入るか見てみようと思ったのですが コンパイルはできるものの、 実行すると「文字から数値への変換エラー。が発生しました」と なって上手くいきませんでした。 'select count(B列) from B表'が単なる文字列として解釈されて エラーになっているのだとは思うものの 正しい書き方がわからないのでよろしくお願いいたします。

  • php上でSQL文を実行した結果と、phpMyAdminで実行した結果が違う

    ☆実行環境 php5.3 MySQL4.0 $sql="SELECT * FROM テーブル名 WHERE フィールド名 like '".$変数."%'" php上で上記のようなSQL文を実行させようとしています。 テーブルには該当する行がいくつかあるのですが、ページ上では1行も表示してくれません。 mysql_num_rowsの返り値を見ると0になっています。 SQL文の組み立てがおかしいのかと思い、phpMyAdmin上でSQL文を実行すると、 きちんと欲しい内容が表示されます。 とするとphpでのSQL文の書き方がおかしいのだと思います。 どこかおかしいのかご教授ください。

    • ベストアンサー
    • PHP
  • SQL文の実行

    初歩な質問ですみませんが、WinMySQLadminとコマンドプロンプトはMySQLにおいてはそれぞれどのような役割があるのでしょうか? テキストエディタなどでSQL文を書いたらどこに格納したらよいでしょうか?

    • ベストアンサー
    • MySQL
  • MS-DOSでのSQL実行について

    MS-DOSでSQLPlusを使い、select文などを実行しようと思うのですがソースコードの書き方がいまいち分かりません。 sqlplus ユーザ名/パスワード@データベース名 @実行したいSQLファイル1 if "%a%"==1( @実行したいSQLファイル2 ) else ( @実行したいSQLファイル3 exit というような形でソースを書いたのですがSQLのファイルが開かなかったりでうまく動きません。 SQLファイルの中身はselect文などで、 変数aはSQLの中でsetされる変数です。 どのように書けばうまく実行できるのでしょうか? また、参考になるサイトなどありましたら教えて頂けると助かります。 よろしくお願いします。

  • PLSQLで変数に格納されたSQL文の実行

    お世話になります PLSQLで変数に格納されたSQL文を実行するにはどうしたらよいでしょうか? vSql := 'select count(*) from XXX_tbl;' で vSql を実行させたいです。 ご教授ください。

  • SQLの結果でWindowsコマンドを実行

    毎度お世話になります。 SQL文の実行結果をもとにWindowsコマンドを実行したいのですが方法がわからず困っております。 ご存知の方がおられましたらご教示いただれば幸いです。 まず実行するSQLは select foldername列 from A表; foldernameは、複数行の結果が返ってきます。 この帰ってきた結果を元に、Winddowsのフォルダー(ディレクトリ)を削除するコマンド > rmdir c:\abc\foldername を発行して、c:\abcフォルダー配下にあるfoldernameと同じ名前のフォルダーを削除 することを考えています。foldernameは複数ありますので、ループ処理も必要です。 基本的な質問で恐縮ですが、何卒よろしくお願いします。

  • SQLの発行方法

    SQL文を発行する場合にはSQL文を変数に格納してExecuteメソッドで発行しますが、SQL文が2文になる場合(最初のSQL文であるデータを取得して、次のSQL文でそのデータを使って検索等を行うとき)にはもう一度上記の手続きを繰り返すしかないのでしょうか?。 あるいは、SQL文を長くして一文にまとめる(できる場合とできない場合があるように思うのですが)方法があるのでしょうか 一般的な処理方法を教えていただけないでしょうか

  • アプリで実行されたSQLの表示

    すみません。 初歩的な事かも知れませんが教えて下さい。 アプリケーションにて、SQL文が色々実行されています。 SQLServerからどのようなSQLが実行されたかを 見る為にはどのようにすればよろしいのでしょうか? よろしくお願いします。

  • Perlでexecuteをまとめて実行したい

    以前似たような質問をしたモノですが、 Perl(cgi)ファイルからテーブル内の一定の項目をDELETEしようとしています 具体的にいうと、多数あるチェックボックスにチェックされた項目のみを削除するプログラムで、チェックされた値はハッシュに格納し読み込み、削除をしています。 foreach $key (keys %hash) {   # 取り出した値を$noに代入   $no = $hash{$key};   # SQL発行   $sql = $db->prepare("DELETE FROM テーブル名 WHERE レコード指定名='$no'");   # SQL実行   $sql->execute; } もしくは # ハッシュに入れた値をカウント $n = keys( %hash ); # プレースホルダを使用し削除の実行 $sql = $db->prepare("DELETE FROM テーブル名 WHERE レコード指定名=?"); for($i=0; $i<$n; $i++) {    # SQL実行    $sql->execute(@hash{$i}); } 上記の方法でどちらも問題なく実行できているのですが、ご覧のようにハッシュに格納されている数だけ$sql->execute;を実行しているため効率が悪い、と担当者から指摘をうけました。 少しでもマシンの負担を軽くし、スムーズにするためにexecuteをまとめて実行することを求められています。 selectcol_arrayref などを使う方法などを検索できたのですが、具体的なサンプルがないとまだ分からない初心者で、上記のプログラムに当てはめる方法が分からないでいます。 ご教授のほどよろしくお願いします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう