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

A 回答 (3件)

使ったことは無いのですが、ざっとページを眺めてみた感じ、



・DBI は connect のときに DSN を指定するが、Win32::ODBC はコンストラクタで指定する
・SQL の発行は、DBI は prepare + execute だが、Win32::ODBC は Sql で行なう

というふうに、メソッドは全く違います。

詳細に知りたいのであれば、本家(参考URLのふたつめ)に勝るものはないので
しょうが、ソースの雰囲気を知りたいということであれば、参考URLのひとつめ
なんかどうでしょう?

# ちょっと読みにくい (^^;

もっと読みにくいんですけど、簡潔なのは

http://www.geocities.co.jp/Bookend-Soseki/6187/x …

かな。

参考URL:http://www.wao.or.jp/user/matumiya/cgi/docs/Usef …
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/12/27 18:02

追加。



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

参考URL:http://www.roth.net/perl/odbc/conf/Home.htm
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/12/27 13:13

ある程度、perl と SQL のそれぞれについての知識がある、という前提で、


参考URL のページは、コンパクトにまとまっていて読みやすいですよ。

参考URL:http://www.rfs.co.jp/sitebuilder/perl/dbi/

この回答への補足

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

補足日時:2001/12/27 12:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QPerl 内で実行される Perl が STDOUT に吐いたものを変数で受け取りたい

 凄い不思議な質問タイトルになってしまいましたが……(笑)

 下記のようなソースを実行したとします。

-------------------------○ source.pl
open(IN, "<dest.pl");
foreach(<IN>){$s.=$_;}
close(IN);
eval($s);

 このとき、source.pl で実行される dest.pl には別の Perl プログラムが入っています。
 で、dest.pl の内部にはいくつかの print ""; があって、標準出力をおこなっているわけですが、この標準出力結果を画面には出さず、source.pl 側で受け取る事はできないもんでしょうか。

  @r = `dest.pl`;

 という方法もあるとは思うんですが、なんとか eval でやりたいのです。

 なんかパイプとか繋ぎなおせば何とかなりそうな気もするんですが……。
 何かご存知の方がいらっしゃいましたら、よろしくお願いします。

Aベストアンサー

子プロセスでevalし、その出力をpipeで読んではどうでしょうか。

if (open IN, "dest.pl") {
  local $/;
  $s = <IN>;
  close IN;
}

pipe RDP, WRP;

if (my $pid = fork) {  # 親
  close WRP;
  chomp(@r = <RDP>);
  close RDP;
  wait;
}
elsif (defined $pid) {  # 子
  close RDP;
  select WRP;  # 標準出力を WRP に変更
  $| = 1;      # バッファリングを止める
  eval($s);
  close WRP;
  exit;
}
else { die $! }  # fork失敗

foreach (@r) {
  print "$_\n";
}

Qperlで変数の中身を変数とみなす方法ってありますか?

perlで、変数の中身を変数とみなし、その中身を知る方法ってありますか?
具体的に言うと、

$abc = "$xyz";
$xyz = "test";

なる状況だったとして、$abc から "test" という文字列にたどりつく
方法ってあるのでしょうか?

何をしたいのかというと、テキストファイル上に "$xyz" と書かれてたと
します。そのテキストファイルを perl で解読したとき、その時点での
実行中の $xyz に何が入っているかを得たいのです。
もちろん、連想配列を使えば似たようなことができるのは知っていますが、
性質上、できればスタティック変数を使いたいのです。

そのような方法は、perl には用意されているのでしょうか?

Aベストアンサー

動的に式を評価する命令であるeval()を使えば、ご要望の機能は実現できると思いますよ

QPerlの出力を、Perlから実行するプログラムの標準入力にしたい

現在データを収集してくるPerlのスクリプトを作っています。

このスクリプトから、ローカルにある、別のrubyスクリプトに、収集してきたデータを渡したいのですが、rubyスクリプトは、標準入力を前提として作られています。
簡単に考えると、一旦ファイルに落として、そのファイルをリダイレクトする形でPerlからrubyスクリプトを起動すればよさそうなのはわかるんですが...

なにか他にうまい方法がPerlにはあるはずだといろいろ探しているのですが、見つかりません。

ファイル渡ししか方法は無いのでしょうか?

Aベストアンサー

パイプでオープンすればよろしいのでは?

参考URL:http://www.stackasterisk.jp/tech/program/perl02_01.jsp

QPerlスクリプトが、ローカルでは実行できるが、HTTP経由では実行できない

現在Perlスクリプトを作成し
サーバにアップしました。

SSHでサーバにログインし

#perl a.cgi
と実行したところ(CGIとして動作させるため。中身はPerlスクリプト)

Content-type: text/html

<html>
<body>
あああああ
</body>
</html>

のようなメッセージが表示され正常に動作しているとおもいます。

しかし、
http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると
500 Internal Server Error
になります。

パーミッションは755で正常
Perlのパスは#!/usr/bin/perlとしており、これも正常です。

文字コードはeuc-jp 改行コードLF

サーバはApache/1.3.33
Perlバージョンは5.8.4

自分のパソコン上でperl+HTTPサーバ(httpd)を使うと
HTMLふぁいるとして出力されます。
サーバ上でHTTPを使ってアクセスしたときのみエラーとなります。

このような現象が起こるのですが原因がわかりません。
お願いします。

現在Perlスクリプトを作成し
サーバにアップしました。

SSHでサーバにログインし

#perl a.cgi
と実行したところ(CGIとして動作させるため。中身はPerlスクリプト)

Content-type: text/html

<html>
<body>
あああああ
</body>
</html>

のようなメッセージが表示され正常に動作しているとおもいます。

しかし、
http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると
500 Internal Server Error
になります。

パーミッションは755で正常
Perlのパス...続きを読む

Aベストアンサー

>500 Internal Server Error
これは、パーミッションの問題ではなく、実行エラーですよね。
一行目は以下だけですか? よけいなブランク文字やスイッチとか後ろに付いてると、サーバーによってはエラーにされてしまう事があります。
コマンドライン実行では、スイッチ有効なのでエラーにならないから、こういう現象になるのかも。
#!/usr/bin/perl

※ perl cgi覚えたての頃、一行目の後ろにコメントを付けていて、unix系サーバーにアップするとエラーになったのだけど、原因がわからず四苦八苦した覚えが。。。
windows local サーバーでは、一行目を無視してたので気付くのが遅れた。

あとは、実際のスクリプトの方を見ないことには?
なにか、そのサーバーでは使えないモジュールを使うような指定があったりとかしませんか?

QPerlスクリプトが実行できない??どうやったら実行できる?

前にPerlスクリプトを実行する際に、
まず、PCに何かインストールしてから
実行できるようになったのを覚えています。

パソコンを再インストールしたのですが、
何をインストールすれば実行できるように
なるか忘れてしまいました。

実行すると
ERROR:cmd~~:Cannot start command. (perl.exe ~~.pl 1152 864) と出ています。

どなたか教えてください。

windows2000を使用しています。

Aベストアンサー

Active Perlをインストールしてください。

参考URL:http://penguin.nakayosi.jp/windows/perl.html


おすすめ情報