ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl-dbi-dev
perl-dbi-dev
Re: Bug in DBD::Oracle handling LOB columns and synonyms?
by scoles other posts by this author
May 20 2008 2:03PM messages near this date
Bug in DBD::Oracle handling LOB columns and synonyms? | RE: Bug in DBD::Oracle handling LOB columns and synonyms?
Ok I will have a look at it and you are right the code does not look quite
right.

Do you think you can raise a ticket for this at
http://rt.cpan.org/Public/Dist/Display.html?Status=Active&Name=DBD-Oracle

that way I can track it better.

You do not happen to know what the orginal starting line number was in oci8?

cheers John SColes


>  Hi *,
>  I'm using DBD::Oracle (code checked onCPAN and verified in version 1.21)
>  and encountered a problem (DB is Oracle 10gR2) related to LOBs and
>  synonyms:
> 
>  Table TTHUMBNAIL (DOCUMENT_ID NUMBER(12), THUMBNAIL BLOB NOT NULL) is
>  owned by user DMSSGADM. User DMSSGDP has a synonym TTHUMBNAIL on the table
>  and all necessary rights granted.
> 
>  When executing the following code
> 
>  $sthInsertTTHUMBNAIL = prepareStatement($dbh,
>                                          'INSERT ' .
>                                          'INTO    tthumbnail ' .
>                                          '       (document_id, ' .
>                                          '        thumbnail) ' .
>                                          'VALUES (document_id_seq.CURRVAL,
>  ' .
>                                          '        ?)');
>  $sthInsertTTHUMBNAIL->bind_param(1, $thumbnail, { ora_type => ORA_BLOB });
>  $sthInsertTTHUMBNAIL->execute();
> 
>  I get the following error:
> 
>  ORA-04043: object DMSSGADMTTHUMBNAIL.TTHUMBNAIL does not exist (DBD
>  SUCCESS: OCIDescribeAny(view)/LOB refetch)
> 
>  Currently I tracked down the error to the following place in oci8.c, but
>  since I got no compiler here, I can't verify further:
> 
>  01 #ifdef OCI_ATTR_OBJ_NAME /* not in 8.0.x */
>  02     OCIDescribeAny_log_stat(imp_sth->svchp, errhp, tablename,
>  strlen(tablename),
>  03 		(ub1)OCI_OTYPE_NAME, (ub1)1, (ub1)OCI_PTYPE_SYN, dschp, status);
>  04     if (status == OCI_SUCCESS) { /* There is a synonym, get the schema
>  */
>  05       char new_tablename[100];
>  06       char *syn_schema=NULL,  *syn_name=NULL;
>  07       OCIAttrGet_log_stat(dschp,  OCI_HTYPE_DESCRIBE,
>  08				  &parmhp, 0, OCI_ATTR_PARAM, errhp, status);
>  09       OCIAttrGet_log_stat(parmhp, OCI_DTYPE_PARAM,
>  10			  &syn_schema, 0, OCI_ATTR_SCHEMA_NAME, errhp, status);
>  11       OCIAttrGet_log_stat(parmhp, OCI_DTYPE_PARAM,
>  12			  &syn_name, 0, OCI_ATTR_OBJ_NAME, errhp, status);
>  13       strcpy(new_tablename, syn_schema);
>  14       strcat(new_tablename, ".");
>  15       strcat(new_tablename, syn_name);
>  16       tablenameew_tablename;
>  17       if (DBIS->debug >= 3)
>  18 	PerlIO_printf(DBILOGFP, "       lob refetch synonym, schema=%s,
>  name=%s, new tablename=%s\n", syn_schema, syn_name, tablename);
>  19     }
>  20 #endif /* OCI_ATTR_OBJ_NAME */
> 
>  First, lines 05 & 16 constitute a very bad situation, since the pointer
>  refers to a stack variable that is freed when the block is closed :-( So
>  this buffer should be declared outside the block, anyway...
> 
>  And from what I know about OCIAttrGet, if you retrieve a text attribute,
>  you have to pass a pointer to receive the length of the string, as it is
>  not '\0' terminated! After that you would call something like
> 
>  strncpy(new_tablename, syn_schema, syn_schema_length);
>  strcpy (new_tablename, ".");
>  strncpy(new_tablename, syn_name, syn_name_length);
> 
>  I'm looking forward to hearing from you about the issue, since I'm really
>  stuck on the topic.
> 
>  Sincerely,
> 
>    Mirko Kraft
> 
>  UBS AG
>  Global Wealth Management & Business Banking
>  Information Technology
>  eRMS - electronic Records Management Solutions
>  Viaduktstr. 31-35, PO Box 4473, CH-4051 Basel
>  Tel. +41-61-288 53 72
>  Fax +41-61-288 71 91
>  www.ubs.com
> 
>  Based on previous e-mail correspondence with you and/or an agreement
>  reached with you, UBS considers itself authorized to contact you via
>  unsecured e-mail.
>  Warning:
>  (a) E-mails can involve SUBSTANTIAL RISKS, e.g. lack of confidentiality,
>  potential manipulation of contents and/or sender's address, incorrect
>  recipient (misdirection), viruses etc. UBS assumes no responsibility for
>  any loss or damage resulting from the use of e-mails. UBS recommends in
>  particular that you do NOT SEND ANY SENSITIVE INFORMATION, that you do not
>  include details of the previous message in any reply, and that you enter
>  e-mail address(es) manually every time you write an e-mail.
>  (b) As a matter of principle, UBS does NOT accept any ORDERS, revocations
>  of orders or authorizations, blocking of credit cards, etc., sent by
>  e-mail. Should such an e-mail nevertheless be received, UBS is not obliged
>  to act on or respond to the e-mail.
>  Please notify UBS immediately if you received this e-mail by mistake or if
>  you do not wish to receive any further e-mail correspondence. If you have
>  received this e-mail by mistake, please completely delete it (and any
>  attachments) and do not forward it or inform any other person of its
>  contents.
> 
> 
> 
Thread:
Mirko Kraft
scoles
Mirko Kraft

Privacy Policy | Email Opt-out | Feedback | Syndication
© 2004 ActiveState, a division of Sophos All rights reserved