Hi all, so I''m developing an app in Rails (first time, have been using
Ruby a while), and I''m running into an issue with ActiveRecord. It
doesn''t seem to like Oracle views.
We have a large application where most stuff happens in Oracle stored
procedures. But, for displaying and joining this data I was hoping to
use ActiveRecord and Rails. When I try to simply say:
class Environment < ActiveRecord::Base
end
I get:
ORA-24372: invalid object for describe
I assume ActiveRecord is doing "describe environments" magic to create
accessors/etc. (Note: I get this same error trying this from sqlplus as
you can''t describe views)
Has anyone tried this and/or had success/failure? I''d like to be able
to use views with Rails (and ActiveRecord is not a requirement; just
trying to understand everything).
Thanks,
Nate
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk
-~----------~----~----~----~------~----~------~--~---
Nate,> > I assume ActiveRecord is doing "describe environments" magic to create > accessors/etc. (Note: I get this same error trying this from sqlplus as > you can''t describe views) >It may not be using the describe function. For example I can use sqlplus to describe a view that I created called venvironments. I don''t have ActiveRecord setup so I didn''t test that part. But Oracle describe seemed to work on a view. Matt Listing:>sqlplus blah/blah@blahConnected to: Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.6.0 - Production SQL> select object_name,object_type 2 from all_objects 3 where object_name = ''VENVIRONMENTS''; OBJECT_NAME OBJECT_TYPE ------------------------------ ------------------ VENVIRONMENTS VIEW SQL> desc venvironments Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER(38) ENVIRONMENT NOT NULL VARCHAR2(64) LAYOUT_ID NOT NULL NUMBER(38) LAYOUT VARCHAR2(32) ENVIRONMENT_TYPE_ID NOT NULL NUMBER(38) ENVIRONMENT_TYPE VARCHAR2(32) LIFE_CYCLE_ID NOT NULL NUMBER(38) LIFE_CYCLE VARCHAR2(32) DEFAULT_DBSERVER_ID NUMBER(38) DEFAULT_DBSERVER VARCHAR2(32) AUTH_OBJECT_ID NOT NULL NUMBER(38) AUTH_OBJECT VARCHAR2(64) UPDATE_USER VARCHAR2(64) UPDATE_DATE DATE CREATE_USER VARCHAR2(64) CREATE_DATE DATE --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
In the code of oracle connection adaptor for active record it looks
like views are intended to be supported. See the "when OCI_PTYPE_TABLE,
OCI_PTYPE_VIEW" line.
--------- excerpt -----------
# Uses the describeAny OCI call to find the target owner and
table_name
# indicated by +name+, parsing through synonynms as necessary.
Returns
# an array of [owner, table_name].
def describe(name)
@desc ||= @@env.alloc(OCIDescribe)
@desc.attrSet(OCI_ATTR_DESC_PUBLIC, -1) if VERSION >=
''0.1.14''
@desc.describeAny(@svc, name.to_s, OCI_PTYPE_UNK)
info = @desc.attrGet(OCI_ATTR_PARAM)
case info.attrGet(OCI_ATTR_PTYPE)
when OCI_PTYPE_TABLE, OCI_PTYPE_VIEW
owner = info.attrGet(OCI_ATTR_OBJ_SCHEMA)
table_name = info.attrGet(OCI_ATTR_OBJ_NAME)
[owner, table_name]
when OCI_PTYPE_SYN
schema = info.attrGet(OCI_ATTR_SCHEMA_NAME)
name = info.attrGet(OCI_ATTR_NAME)
describe(schema + ''.'' + name)
end
end
---------------
Source File:
http://dev.rubyonrails.org/svn/rails/trunk/activerecord/lib/active_record/connection_adapters/oracle_adapter.rb
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk
-~----------~----~----~----~------~----~------~--~---
Just so everyone knows the resolution, it turned out my view had become invalid because an underlying table had issues. The Oracle error was just confusing. I managed to get the *real* error by doing a "select * from environments". Once I corrected the view it works. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---