久々にRubyの事書くので、ちょっと緊張。 でもあくまでメモ書きなので、もし間違ってたら教えてください〜。
今日は、「perl(CGI) から Rubyスクリプトを呼び出し、また perl(CGI)に戻る」というコードを書きました。 このperlのCGIへの機能追加の要望だったので、面倒だから最初からRubyで書き直そうと思ったのですが、perlのコードは残しておかなければならなかったため、機能追加の部分はRubyで書くことにしました。
機能追加の部分は、oracleに接続して、ほしいデータを取得、それをファイルに出力するという簡単なスクリプトです。*1
require "oci8"
require "dbi"
user = Array.new
DBI.connect('dbi:OCI8:dbname', 'userid', 'passwd') do |dbh|
begin
sth = dbh.prepare('SELECT NAME FROM T_TABLE WHERE MEMBER = ?')
sth.execute(number)
while row = sth.fetch do
user.push(row[0])
end
sth.finish
rescue DBI::DatabaseError => e
puts "Error code: #{e.err}"
puts "Error message: #{e.errstr}"
exit 1
rescue => ex
puts ex.message
exit 1
end
end
File.open("./data.tsv","w"){|file|
file.print(_user.join("\t")+"\n")
}
exit 0
私にとって、このスクリプトで初めてデータベースを使ってみたということもあって、結構苦戦。なぜなら、
oracleに接続できない.....
このスクリプトを手動で動かしたところ、実行ユーザの環境変数に、ORACLE_SID,ORACLE_OWNER,ORACLE_HOMEを設定してみると接続できましたが、CGI経由では接続できず。
ということで、Rubyのスクリプトに環境変数を設定してみたのですが、それでも接続できない。
oracleのエラーは、
oracleはもちろんDBにすら触ったことのない私にはお手上げ状態だったので、他の人に相談。結構苦戦して3時間後*2に解決。
原因は、「NET8の設定ができてなかったから。」とのこと。 ということで、tnsnames.oraを書き換え、無事終了。
ということでメモを一筆 〆(_ _)
他のDBのことはまったく分からないのでこれを機に勉強するのもいいかも。