Project

oracle_raw

0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
This is a Ruby library for interfacing with an Oracle Database using pooled OCI8 raw connections (http://ruby-oci8.rubyforge.org/en/). Connection pooling is achieved by utilizing ActiveRecord Oracle Enhanced adapter (https://github.com/rsim/oracle-enhanced).
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 3.2
>= 1.6
>= 2.0
>= 5.4

Runtime

 Project Readme

oracle_raw

This is a library for interfacing with an Oracle Database. It uses ActiveRecord Oracle Enhanced adapter (https://github.com/rsim/oracle-enhanced) for connection pooling, but otherwise a raw Ruby-OCI8 connection (http://ruby-oci8.rubyforge.org/en/) is used.

Installation

gem install oracle_raw

Usage

At the moment the following methods are implemented:

  • query: a general querying method
  • with_connection: a method taking a block as an argument; inside the block you can use a raw connection object to execute queries, updates etc.

Connect to a database and create a pool of five connections. Global options (see below) and pool size are not mandatory. Default pool size is 1.

tnsnames = '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = TEST)))'
schema = 'scott'
password = 'tiger'
connection_pool_size = 5
global_options = {}

db = OracleRaw.new(tnsnames, schema, password, connection_pool_size, global_options)

Get a connection from the pool and do something with it:

db.with_connection { |c| 
	c.exec('create table names (id number, name varchar2(50))') 
	c.exec("insert into names (id, name) values (1, 'Paul')") 
	c.exec("insert into names (id, name) values (2, 'Maria')")
	c.commit
}

Use query method (handles connection internally). Without parameters:

db.query('select name from names')
=> {:data=>[["Paul"], ["Maria"]]}

Query with parameters:

db.query('select name from names where id = :id', [[:id, 1, Integer]])
=> {:data=>[["Paul"]]}

Query with options: the behaviour of the query method can be controlled with the following options given to initializer, #query or both:

  • :metadata: if :all, returns the number of items in the result set, column names in lower case, and the time and duration of the query. If :none, returns only the result set.
  • :item_format: if :hash, query returns the result items as hashes. The default is :array, i.e. the items are arrays.
  • :amount: if :all_rows, returns all rows. If :first_row, returns only the first row. If :single_value, returns only the first value of the first row. :single_value cannot be used if :item_format is :hash. Default is to return all rows.

Global options can be changed after initialization. Options given to query override global options given to initializer (but not when the option value is nil).

db.query('select name from names', nil, {:item_format => :hash})
=> {:data=>[{"NAME"=>"Paul"}, {"NAME"=>"Maria"}]}

db.query('select name from names', nil, {:item_format => :array})
=> {:data=>[["Paul"], ["Maria"]]}

db.query('select name from names', nil, {:metadata=>:plain})
=> [["Paul"], ["Maria"]]

db.query('select name from names', nil, {:metadata => :all})
=> {:count=>2, :columns=>["name"], :data=>[["Paul"], ["Maria"]], :date=>2012-09-17 15:53:46 +0300, :duration=>0.0016196}

db.query('select count(*) from names', nil, {:amount=>:single_value, :metadata=>:plain}).to_i
=> 2

Close the connection pool:

db.close

Copyright

Copyright (c) 2011-2013 turkia. License: LGPLv3. See LICENSE.txt for further details.