久保です。
# これまで 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