From: KUBO Takehiro Date: 2005-03-24T01:01:13+09:00 Subject: [ANN] ruby-oci8 0.1.10 Hi, I've released ruby-oci8 0.1.10. This is a Oracle module using OCI8 API. URL:http://rubyforge.org/projects/ruby-oci8/ What's new: 1. bind a ref cursor as an OCI8::Cursor or a DBI::StatementHandle. (requested by Stephen Flinter and Jason Sweat.) Example: # 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 or # 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 Restriction: * bind a ref cursor as output, but not as input. That means you can get it from a pl/sql block, can't pass it to the block. 2. bind LONG / LONG RAW as 65535-byte String. (suggested by Graham Jenkins.) Restriction: * If the length is longer than 65535, I don't know what happen. I haven't tested yet. (Sorry) 3. customizable default column data type of select statements. Many people (Dmitry Maksyoma, Maik and Graham Jenkins) have requested to support TIMESTAMP. But I haven't supported it yet. Though you can fetch a TIMESTAMP data as an OraDate by adding the following code to your code. OCI8::BindType::Mapping[OCI8::SQLT_TIMESTAMP] = OCI8::BindType::OraDate To fetch a DATE(oracle) as a Time(ruby). OCI8::BindType::Mapping[OCI8::SQLT_DAT] = OCI8::BindType::Time To fetch a NUMBER(oracle) as a Float(ruby) at all times. OCI8::BindType::Mapping[OCI8::SQLT_NUM] = OCI8::BindType::Float