I tried your suggestion.
DB2 also has a CAST(field AS CHAR( )).

$sth = $dbh->prepare ( " SELECT CAST(\$moid AS CHAR(16)) FROM abc.xyz);

but the result was binary data with 8 additional spaces. Is there something
wrong in the above code

If you have any other suggestion please let me know

Thanks
Sachin



I don't know DB2, but I'm wondering if you're getting a weird binary
rendition of characters.
Each character is one byte and each byte contains two nybbles, each nybble
being represented by one character.
For instance, the hexadecimal ASCII code for the letter "H" is "48", so
"Hello." would yield "48656C6C6F2EXXXX"        (using X to pad out to
sixteen
characters)
and "7AF9FA30" (a pointer value) would yield "3741463946413330".

Perhaps your column contains eight bytes of binary data and the & tells the
system to apply such a translation.
The DB2 documentation should explain it.
You should be able to compare the output from both the command line and
your
program and see if this is true.

The difference between the ways you see the data is not surprising.
When I select a date using the SQL interface (command line) I get it as a
string like "2002-02-27 12:34:56.78"
but when I select a date in a program it is the binary rendition unless I
use a function...
Oracle:         TO_CHAR ( field , 'YYYY-MM-DD HH24:MI.SS' )
RDB:       CAST ( field AS CHAR(22) )


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, February 27, 2002 10:27 AM
To: Stephen Keller
Cc: [EMAIL PROTECTED]
Subject: RE: SELECT \$moid FROM xyz.abc



Hi Stephen,
I am assuming it is a pointer. The column definition says $MOID stores
&CHAR(8).
The actual data I am trying to get is a string like "413567EAFFCXXX" 16
characters.
I would think this is not a LOB/BLOB...
Also when I do a table_info( ) with DBI the TYPE comes up as -2
(SQL_BINARY).
As I have said earlier : when I use command line "SELECT  \$moid from ...."
I get the 16 characters but from DBI::DB2 I get binary data

Thanks
Sachin




Hi Sachin,

Hopefully, I've not completely misunderstood your question.  I'm
stuggling with how to interpret what you mean by the "&char" data
value: that looks like C notation for a pointer.  If by "&char is
being stored in that you column" you mean it is a CLOB or other
type of large object, you may need to DBI blob_read method,
depending on it's length and the version of the DB2 database.
The blob_read is a Statement Handler method and is employed
something like this (DATA is a LOB in this case).

   my $sth = $dbh->prepare ('select $moid from catenv.cattabl');
   $sth->execute();
   my $resultsValue = 0;
   my $count = 0;
   while ( $resultsValue = $sth->fetch() ) {
           $count++;
           if ( open ( OFILE, sprintf (">ofile.%03d", $count ))) {
         # we got some LOB data.
         while ( $buff = $sth->blob_read(1,0,4096) ) {
            print OFILE $buff;
            $buff = q();
         }
      }
      else {
         printf STDERR ("Cannot open output file #%03d", $count);
      }
   }
}
else {
   printf STDERR ("Cannot open output file: $!\n");
}

At this point, the data LOB data for each record will be stored in
a files named ofile.001, ofile.002, ... ofile.00n in your current
working directory.

I hope I'm getting at what you are asking.

stph

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, February 27, 2002 5:28 AM
To: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Subject: Re: SELECT \$moid FROM xyz.abc



Hello,
Still need help.....
So far the discussions have revolved around getting the $moid to be passed
on to DB2.
I think this is already being done because I do get a list.
The problem is that the list is all SQL_BINARY data since  &char is being
stored in that column.

The question is : How do I DEREF  the address?

[snip...]






**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.

This footnote also confirms that this email message has been swept by
MIMEsweeper for the presence of computer viruses.
**********************************************************************






**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.

This footnote also confirms that this email message has been swept by
MIMEsweeper for the presence of computer viruses.
**********************************************************************

Reply via email to