I can confirm I have the same problems as Paul when inserting large
XMLType.

Running on:
1.  SUSE LINUX Enterprise Server 9 (i586)
2.  DBI v1.50
3.  DBD::Oracle v1.18
4.  Oracle client: 9.2.0.4.0
5.  Oracle server: 9.2.0.7.0 - 64bit

Regards,
Philip

Paul Gallagher wrote:
> Thanks for the info Ron. I think you may not have quite hit the limit
> though. 
> 
> I tried your code (are you explicitly typing the bind to :file_header?
> I'm assuming not), and for small data sizes its ok, but once I go very
> large it fails.
> 
> # fyi, I'm creating a long structure like this. max i 10 is ok, max i
> 3000 is not:
> my @books;
> my %dslong;
> for (my $i=1; $i<3000; $i++) {
>       push(@books, {id => $i, title => [ "the book $i title" ] } );
> }
> $dslong{"book"} = [EMAIL PROTECTED];
> # and binding like this:
> $sth->bind_param(":file_header", XMLout( \%dslong , RootName =>
> "books") ); 
> 
> NB: I'm presently testing this with DBD-Oracle-1.17 and DBI-1.52-r1 on
> Windows (ActiveState)
> 
> On 2/13/07, Reidy, Ron <[EMAIL PROTECTED]> wrote:
>> Well, it works for me out of the box as advertised.
>> 
>> Code snippet:
>> 
>>  my $sth_admin_audit_files = $dbh->prepare(qq{
>>    INSERT INTO array_audit.admin_audit_files
>>      (instance_id
>>      ,file_crdt
>>      ,fname
>>      ,file_header
>>      ,file_header_raw
>>      )
>>    VALUES
>>      (:instance_id
>>      ,TO_DATE(:file_crdt, 'DD/MM/YYYY HH24:MI:SS')
>>      ,:fname
>>      ,SYS.XMLType.CREATEXML(:file_header)
>>      ,:file_header_raw
>>      )
>>    RETURNING admin_audit_file_id, crmo
>>    INTO      :admin_audit_file_id, :crmo
>>  }) || die $DBI::errstr;
>> 
>> Running on
>> 
>> 1.  RH Linux 3.0 and 4.0
>> 2.  DBI v1.47
>> 3.  DBD::Oracle v1.16
>> 4.  Oracle v9.2.0.5.0; v10.2.1.0.3; v10.2.0.2.0
>> 
>> My files are around the order of 37Kb in size and I do nothing
>> special 
>> with them (aside from convert the text into XML).  My user has only
>> insert on the table with the XMLTYPE in it.
>> 
>> Does the user running the Perl program have INSERT privs on the
>> table? 
>> Is there a synonym issue or a role issue?
>> 
>> --
>> Ron Reidy
>> Lead DBA
>> Array BioPharma, Inc.
>> 
>> 
>> -----Original Message-----
>> From: Paul Gallagher [mailto:[EMAIL PROTECTED]
>> Sent: Monday, February 12, 2007 12:04 PM
>> To: dbi-users@perl.org
>> Subject: DBD::Oracle - Any advance on inserting CLOB to XMLTYPE?
>> 
>> It seems the current state of affairs is that for inserting to
>> XMLTYPE 
>> fields:
>> a) for <32k, can just insert text
>> b) for >32k, must insert to CLOB, then use a procedure to update
>> XMLTYPE (see
>>
http://www.issociate.de/board/post/206125/DBD::Oracle_and_XMLType.html
>> for a summary of the details)
>> 
>> Personally I've tried just about every trick in the book to try and
>> get a direct-insert of large xml documents into xmltype fields, but
>> to 
>> no avail.
>> 
>> What troubles me is that this _should_ work:
>> # NB: CREATE TABLE tryit ( formname VARCHAR(25), x XMLTYPE )
>> INSERT INTO tryit  (formname, x) VALUES (?, XMLTYPE(?))"
>> 
>> $sth = $dbh->prepare( "INSERT INTO tryit  (formname, x) VALUES (?,
>> XMLTYPE(?))" );
>> $sth->bind_param(1,  "INSERTXMLTYPE" );
>> $sth->bind_param(2, XMLout( \%dslong , RootName => "books"), { TYPE
>> => 
>> SQL_CLOB } );
>> $sth->execute  or warn "INSERTXMLTYPE creation failure";
>> 
>> but it actually just gives ORA-00942: table or view does not exist.
>> this is a bogus message (search metalink for "XMLTYPE ORA-00942").
>> try 
>> an alternative like "INSERT INTO tryit  (formname, x) VALUES (?,
>> XMLTYPE(CAST(? as CLOB)))" and you get ORA-00932: inconsistent
>> datatypes.
>> 
>> All of the above is old news I think.
>> 
>> Why I raise this now is that I discovered the python guys seem to
>> have 
>> got it working OK. See
>> http://blog.gmane.org/gmane.comp.python.db.cx-oracle/month=20050401
>> 
>> connection = cx_Oracle.Connection("user/pw <at> tns")
>> cursor = connection.cursor()
>> cursor.setinputsizes(value = cx_Oracle.CLOB)
>> cursor.execute("insert into xmltable values (xmltype(:value))",
>>        value = "A very long XML string")
>> 
>> Seems very much like a binding issue on the DBI/DBD side.
>> 
>> Any thoughts?
>> 
>> ~paul
>> 
>> This electronic message transmission is a PRIVATE communication
>> which contains information which may be confidential or privileged.
>> The information is intended to be for the use of the individual or
>> entity named above. If you are not the intended recipient, please be
>> aware that any disclosure, copying, distribution or use of the
>> contents of this information is prohibited. Please notify the sender
>> of the delivery error by replying to this message, or notify us by
>> telephone (877-633-2436, ext. 0), and then delete it from your
>> system.  

Reply via email to