Never been to TextSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

ruby stored procedures (See related posts)

There are alot of reasons to use stored procedures. One of the most compelling reasons is that a system has already been built with stored procedures and interfacing with it cannot be by raw SQL. This situation is mainly caused by DBA’s whose job it is to control the flow of information into and out of the database. In “enterprise” situations this is the norm.


  @connection = OCI8.new("db_user", "db_password", "db_name")

  plsql = @connection.parse("BEGIN P_MYPROCEDURE.my_method(:out); END;")
  plsql.bind_param(':out', OCI8::Cursor) 
  plsql.exec

  cursor = plsql[':out']
  plsql.close

  x = ''
  while r = cursor.fetch()
    x = x + r.join(', ') + '
' end @out = x @connection.logout


This code assumes you are using Rails 1.1 as an engine and that you have setup the database.yml for Oracle (10g in this post). The OCI8 object instantiated on the first line is in the OCI8 library which is loaded by Rails, specified in database.yml.

Interfacing with Oracle and its stored procedures pretty much requires some knowledge about Oracle which has some very specific concepts that something like MySQL does not.

First, to pass local variables to the stored procedure’s “in” and “out” variables, you must explicitly “bind” them.

Second is the notion of “cursor”.

Author: hksintl on http://blog.hksintl.com/

Comments on this post

hksintl posts on Jun 25, 2006 at 12:28
This code does not work. My apologies. xtrim: "This address":http://blog.hksintl.com/articles/2006/05/31/calling-oracle-stored-procedures-in-ruby-and-rails has a revised snippet that is a bit more explainatory. Feel free to replace the snippet here. If anyone else has had experiences with using stored procedures in rails, please comment. This snippet only deals with getting out variables. I will try to post how to bind input variables as well.
xtrim posts on Jun 29, 2006 at 07:56
hksintl
I have updated snippet, thank you.
hksintl posts on Jul 06, 2006 at 01:40
Cheers! I have developed this code quite a bit more since this post. Will post again with a tutorial as soon as I get a spare moment.
cornelius posts on Oct 02, 2006 at 13:07
Thanks for the great snippet, it works well for me. I'll be looking forward to the tutorial.

You need to create an account or log in to post comments to this site.


Related Posts