Witch Oracle library should I use

Discussion in 'Ruby' started by Ben Edwards, May 4, 2007.

  1. Ben Edwards

    Ben Edwards Guest

    Have had a look on rubyforge and done a little looking around but not
    totaly sure which ruby oracle library's I should use.

    I am connecting to a 10g database.

    Ruby9i and Ruby/OCI8 seem to be the contenders, or is there something else.

    What would people recommend?

    Ben
     
    Ben Edwards, May 4, 2007
    #1
    1. Advertisements

  2. ruby-oci8. It's been around for a long time, and it works well. It's the API
    used by ActiveRecord's Oracle adaptor, and it also comes with a DBD for use
    with ruby-dbi. I'm using it with Oracle 10g now.

    I've never seen or used Ruby9i though.
     
    Brian Candler, May 4, 2007
    #2
    1. Advertisements

  3. Hi,

    I'm new on this mailing list. My name is Ulf , lives in Sweden and
    been developing for Oracle for many, many years. Used to work for
    Oracle for 10 years.
    I've been studying and learning Ruby for aroune 2 months now and has
    done some work with Ruby and Oracle.
    As suggested i would defenly say go for Ruby/OCI8

    There are some good introductions on how to use Ruby with Oracle on
    OTN (Oracle Technology Network)

    See the following links:

    http://www.oracle.com/technology/pub/articles/marx-ruby.html
    http://www.oracle.com/technology/pub/articles/tate-activeerecord.html
    http://www.oracle.com/technology/pub/articles/haefel-oracle-ruby.html
    http://www.oracle.com/technology/pub/articles/saternos-rails.html

    Kindly Rgds
    /Ulf
     
    Ulf Hellström, May 4, 2007
    #3
  4. Ben Edwards

    Ben Edwards Guest

    Thanks for this. Have been trying Ruby/OCI8 and it seems to work.
    Only thing is when it fetches row it is referenced as an array
    (row[0], row[1]...). Is there a way of referencing the column names
    (row["username"]...).

    Ben

    --=20
    Ben Edwards - Bristol, UK
    If you have a problem emailing me use
    http://www.gurtlush.org.uk/profiles.php?uid=3D4
    (email address this email is sent from may be defunct)
     
    Ben Edwards, May 4, 2007
    #4
  5. Ben Edwards

    Dave Rose Guest

    i did a describe on my table that has a lot of column
    and cut & pasted the result (in order) into a ruby array
    and whose named ruby array.index(named column) address that certain
    corresponding column in the ruby
    oci8 array....
    readcols="_CODE, V_NUM, CUST_CODE, STYP_CODE, CAT_CODE, ACTN_CODE,
    ACTION_DATE, ACTIVITY_DATE, USER_ID, READING, UMPTION, DOS, RTYP,
    REAS_CE, ARGE_DATE, UR_CALC_NUM, INVN_CODE, UIER, U_CADJM, U_FACTOR,
    UR_HIGH_LOW_EXCP, UR_TRBL_CODE_1, UR_TRBL_CODE_2, U_TRBL_CODE_3,
    AT_CODE, _CHARGE_FREQUENCY, U_CHARGE_START_DATE, UR_NUTS,
    UR_REAS_CODE_CNCL, US_CNCL_DATE, URR_CNCL_USER_ID, UR_CUST_CODE_PRIMARY,
    URRCODE_PRIMAR...and on and on....".split(", ")
    recs=conn.exec("SELECT * FROM atable WHERE CODE NOT IN
    ('IN','SKIP','OUT') AND CODE = '#{prem}' AND CUST_CODE = #{cust.to_i}
    AND TO_CHAR(GE_DATE,'YYYYMMDD') = '#{chargedon}' AND IS_DOS > 0"){|r|
    readrec<<r}
    readrec.each do |tut|
    prevdait=tut[readcols.index("_DATE")]
     
    Dave Rose, May 4, 2007
    #5
  6. You could steal some code from ActiveRecord's Oracle connection adaptor.
    When you call Foo.connection.select_all(...) in ActiveRecord, it returns
    an array of
    [{colname=>value, colname=>value},
    {colname=>value, colname=>value},
    ...]

    Or I have a vague recollection that maybe ruby-dbi will do this for you.
     
    Brian Candler, May 4, 2007
    #6
  7. Hi Ben,

    You could always use fetch_hasch method instead of fetch. This will =20
    fetch the data as a ruby Hash where each key is the column name

    Below is a simple example that select all columns from USER_TABLES =20
    but only prints out the TABLE_NAME column.

    Note: The reference to the column name, in the sample TABLE_NAME has =20
    to be in uppercase.

    The OCI8 API is documented quite good see

    http://ruby-oci8.rubyforge.org/en/api.html

    require 'oci8'

    class Testoci

    def get_data

    puts "***************************"
    puts "Connecting..."
    puts "***************************"
    connection =3D OCI8.new('demo', 'demo', 'XE')
    puts "***************************"
    puts "Fetching data"
    puts "***************************"
    cursor =3D connection.parse("SELECT * FROM USER_TABLES")
    cursor.exec()
    # print out only the values of the TABLE_NAME column
    while res =3D cursor.fetch_hash()
    puts res["TABLE_NAME"]
    end
    cursor.close
    connection.logoff
    end

    end

    ora=3DTestoci.new
    ora.get_data


    Kindly Rgds
    /Ulf

     
    Ulf Hellström, May 5, 2007
    #7
  8. Ben Edwards

    Ben Edwards Guest

    ruby-dbi seems like a good idea but its Beta and there hasn't been a
    release for over a year. Don't think the folks here will trust it in
    a production environment.

    Ben
     
    Ben Edwards, May 8, 2007
    #8
  9. Ben Edwards

    Ben Edwards Guest

    Thanks, just the ticket.

    Shame fetch_hash is not an iterator but think I am going to write a
    wrapper to make it easier to switch librarys/databases.

    Ben

    --=20
    Ben Edwards - Bristol, UK
    If you have a problem emailing me use
    http://www.gurtlush.org.uk/profiles.php?uid=3D4
    (email address this email is sent from may be defunct)
     
    Ben Edwards, May 8, 2007
    #9
  10. The last release was August 2006, and it has had 11,870 downloads since
    then.

    I used it (with Oracle) in a large project at a previous employer about 4
    years ago, which is still running strong. Before ActiveRecord came along,
    this was probably the most widely used database interface from Ruby. I
    wouldn't worry about the "beta" label.

    OTOH, if you're writing code which *only* ever needs to talk to Oracle, then
    you may as well cut out the middle man.

    Regards,

    Brian.
     
    Brian Candler, May 8, 2007
    #10
  11. Hi Ben,

    Am Samstag, 05. Mai 2007, 00:27:13 +0900 schrieb Ben Edwards:
    I managed to compile Ruby9i 16 months ago. I sucessfully
    connected to Oracle 8 and 9 databases. The thread started
    with message id 175798.

    I remember I was quite happy with it. Good luck!

    Bertram
     
    Bertram Scharpf, May 8, 2007
    #11
  12. Ben Edwards

    Ben Edwards Guest

    Need to have a look at ActiveRecord bit it seems not to be geared
    towards SQL. This is not a bad thing per say but I have a lot of SQL.

    I do fancy using some type of wrapper as we are thinking of moving
    stuff to postgress.

    Regards,
    Ben
     
    Ben Edwards, May 8, 2007
    #12
  13. Ben Edwards

    khaines Guest

    Don't read too much into that "beta" label nor the last release. I've
    been using ruby-dbi in many, many production apps for years. It's fine.
    And releases aren't frequent because, while DBI could certainly be
    improved, it is also stable and works. If it's not broken.....


    Kirk Haines
     
    khaines, May 8, 2007
    #13
  14. I know the DBI has been handed off at least once. My understanding
    was also that the current maintainers aren't too interested in
    resurrecting it. I agree that it works, but I'm not so sure not
    abandonware. I know there are some very old bugs in it still not
    fixed, though they are minor issues.

    Sequel is looking like a pretty promising library to replace the DBI,
    but it doesn't yet support Oracle:

    http://sequel.rubyforge.org/

    James Edward Gray II
     
    James Edward Gray II, May 8, 2007
    #14
  15. Ben Edwards

    khaines Guest

    I am one of those maintainers. My attitude, at this point, with that
    codebase, is basically one of hand-off maintenance unless a major problem
    rears its head.
    Sequel looks quite promising, but it's also not really in the same niche
    as DBI. It's more of an ORM variation. It has some really neat ideas in
    it, though.

    I've believed, for a couple years, that we need a DBI2. Something that
    isn't so directly modeled on the Perl DBI, but is, instead, more rubyesque
    in it's API design, and something that learns from DBI and fixes some of
    DBI's faults without overachieving -- lean, fast, simple, with a clean
    Ruby API.

    I've discussed this with some other people, off and on, and decided a
    couple months ago that this would be a good project to start on here at
    the beginning of the summer. I have a couple things ahead of it in my
    queue still, but consider this a prerelease announcement. :)

    So if anyone has any specific suggestions or requests to voice regarding a
    fast, clean DBI replacement, now would be a good time.


    Kirk Haines
     
    khaines, May 8, 2007
    #15
  16. I think this is an exceptionally good idea. You will be very
    popular. ;)

    James Edward Gray II
     
    James Edward Gray II, May 8, 2007
    #16
  17. Completely agree! This sounds promising.

    Kirk, what do you think about starting a Wiki to collect requirements
    and / or improvement ideas? I have at least one requirement that I
    believe is not covered by DBI right now.

    I'd also love to help although I can offer only limited resources.

    Kind regards

    robert
     
    Robert Klemme, May 9, 2007
    #17
  18. Ben Edwards

    khaines Guest

    I will do that. Thanks for the suggestion. I'll follow up to the list in
    about a week with wiki and initial project information.


    Kirk Haines
     
    khaines, May 9, 2007
    #18
  19. Cool!

    robert
     
    Robert Klemme, May 9, 2007
    #19
  20. Just to add my voice in approval, in addition to which I've
    sent you a private message offering help. I'd love to have
    a better basis on which to build my ActiveFacts library,
    instead of relying on the adapters of ActiveRecord.

    I'm also running a BOF session on support for Enterprise
    and Legacy databases at the RailsConf next week. Hopefully
    some of you will be there to discuss things and maybe help
    out on the panel.

    Clifford Heath, Data Constellation.
     
    Clifford Heath, May 11, 2007
    #20
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.