久保です。 # これまで ruby-talk にのみリリースアナウンスを出していて、ruby-list # にはアナウンスするのを忘れていました。 ruby-oci8 0.1.10 をリリースしました。 ruby-oci8 は OCI8 を使用した Oracle モジュールです。 URL:http://rubyforge.org/projects/ruby-oci8/ What's new: 1. PL/SQL のカーソルを OCI8::Cursor や DBI::StatementHandle として取り 出す。 (requested by Stephen Flinter and Jason Sweat.) 例: (OCI8上位API) # parse PL/SQL plsql = conn.parse("BEGIN OPEN :cursor FOR SELECT * FROM emp; END;") # bind :cursor as OCI8::Cursor plsql.bind_param(':cursor', OCI8::Cursor) # execute plsql.exec # get a bind value, which is an OCI8::Cursor. cursor = plsql[':cursor'] # fetch results from the cursor. while r = cursor.fetch() puts r.join(',') end または (Ruby/DBI の API) # parse/bind/execute PL/SQL sth1 = dbh.execute("BEGIN OPEN ? FOR SELECT * FROM emp; END;", DBI::StatementHandle) # get a bind value, which is a DBI::StatementHandle. sth2 = sth1.func(:bind_value, 1) # fetch results from the statement handle. while r = sth2.fetch() puts r.join(',') end 制限 PL/SQL からの出力として値を取り出すことはできますが、 OCI8 で作成したカーソルを PL/SQL へわたすことはできません。 2. LONG / LONG RAW のカラムを 65535 バイト以下の String として取り出す。 (suggested by Graham Jenkins.) 制限 65535 を越えたときの動作は実験していません.....。m(__)m 3. SELECT文で取り出される値の型のデフォルトを変更可能に。 いろんな人が Oracle の TIMESTAMP 型のサポートをリクエストしています が、いまだにサポートできていません。しかし、以下のコードを使用すると、 精度は落ちますが、TIMESTAMP型を OraDate として取り出すことができます。 OCI8::BindType::Mapping[OCI8::SQLT_TIMESTAMP] = OCI8::BindType::OraDate Oracle の DATE 型を ruby の Time で取り出す。 OCI8::BindType::Mapping[OCI8::SQLT_DAT] = OCI8::BindType::Time Oracle の NUMBER 型を常に ruby の Float で取り出す。 OCI8::BindType::Mapping[OCI8::SQLT_NUM] = OCI8::BindType::Float といったことが可能です。 では、再見 -- 久保 健洋 email: kubo / jiubao.org web: http://www.jiubao.org GnuPG fingerprint = 5F7B C8EF CA16 57D0 FDE1 9F47 C001 1F93 AC08 2262