[Dbix-class] Oracle xmltype

Morgon Hed morgonhed at yahoo.com
Thu Apr 30 14:06:24 GMT 2009


Ok thanks, that is at least giving me a starting point.
One more quirk though:

In order to get to the raw XML in plain DBI I have to do the follwing:

select xmltype.getclobval(xml_column) from table

i.e. I cannot simply select from xml_column but I have to pass that to the PL/SQL function xmltype.getclobval to get the xml as text.

How can I do that in the DBIx::Class scenario?

Many thanks!

--- On Thu, 4/30/09, John Napiorkowski <jjn1056 at yahoo.com> wrote:

> From: John Napiorkowski <jjn1056 at yahoo.com>
> Subject: Re: [Dbix-class] Oracle xmltype
> To: "DBIx::Class user and developer list" <dbix-class at lists.scsys.co.uk>
> Date: Thursday, April 30, 2009, 9:29 AM
> 
> 
> --- On Thu, 4/30/09, Morgon Hed <morgonhed at yahoo.com>
> wrote:
> 
> > From: Morgon Hed <morgonhed at yahoo.com>
> > Subject: [Dbix-class] Oracle xmltype
> > To: dbix-class at lists.scsys.co.uk
> > Date: Thursday, April 30, 2009, 7:28 AM
> > 
> > Hi,
> > 
> > I am rather new to DBIx::Class and I wonder if
> someone
> > could explain to me how to deal with Oracle
> > XmlType-columns.
> > 
> > I have a table which contains a column of type
> XmlType
> > and  I want that column to be inflated/deflated as
> an
> > object of it's own.
> > 
> > What I need to do in order to get to the raw XML in
> plain
> > DBI is to do something like the following:
> > 
> > $sth->bind_param(":xml", $xml, { ora_type =>
> > ORA_XMLTYPE } );
> > 
> > And I cannot figure out how to incorporate this
> binding
> > into DBIx::Class.
> > 
> > Please note that I want both to retrieve and to update
> this
> > column.
> > 
> > Many thanks!
> > 
> > Not 100% sure I know what you need, but I imagine this
> could be handled the same way we hacked bind parameters to
> handle how some databases need to know about bytea or blob
> types.  You might want to check out
> DBIx::Class::Storage::DBI::Pg and in particular the method
> 'bind_attribute_by_data_type' which is used to add some bind
> parameter support for postgresql.  Adding this to the
> Oracle DBD should be easy, something like:
> 
> (in package DBIx::Class::Storage::DBI::Oracle)
> 
> use DBD::Oracle qw(:ora_types); ## just guessing
> 
> sub bind_attribute_by_data_type {
>   my ($self,$data_type) = @_;
> 
>   my $bind_attributes = {
>     xml => { pg_type =>
> DBD::Oracle::ORA_XMLTYPE },
>   };
>  
>   if( defined $bind_attributes->{$data_type} ) {
>     return $bind_attributes->{$data_type};
>   }
>   else {
>     return;
>   }
> }
> 
> 
> and then in your storage class, under
> __PACKAGE__->add_columns you'd do:
> 
> __PACKAGE__->add_columns(
>   'xmltype' => {
>     data_type => 'xml',
>     is_nullable => 1,
>   },
>   .....
> 
> And it should just work, at least for reading and writing,
> if that's what you mean.  If you are asking about
> deeper support for the way Oracle (and now Postgresql I
> believe) has implemented sql functions and extensions to do
> stuff like selecting bits inside an xml stored doc, or doing
> joins againt info stored inside a xml document, right now I
> think you'll need to bind the functions as some of the
> documented examples for using functions in your SQLA.
> 
> jnapiorkowski
> 
> 
> John
> 
> 
> 
> 
> _______________________________________________
> List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
> Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk
> 


      



More information about the DBIx-Class mailing list