Maybe I should include the output ... ;->
[tlowery@stllnx1 segments]$ perl -w get_segments.pl
Book id: 1
Segment: Title segment: Using DBI Author segment: TBD Cost segment: Free
Pages segment: 327 Print Date segment: 12-DEC-2002
T
On Sun, Aug 19, 2001 at 01:54:11PM -0400, Thomas A . Lowery wrote:
> In this example I've created 1 simple table.
>
> Books table:
> scott@connect--> /desc books
> Describe: books
> NAME TYPE NULLABLE
> -------------------- -------------- --------
> BOOK_ID NUMBER (3) N
> ID NUMBER (3) N
> SEGMENT VARCHAR2 (10) Y
> [3 rows of 3 fields returned]
>
> scott@connect--> select * from books/
> BOOK_ID ID SEGMENT
> ------- --- -----------------------------------
> 1 1 Title segment: Using DBI
> 1 2 Author segment: TBD
> 1 3 Cost segment: Free
> 1 4 Pages segment: 327
> 1 5 Print Date segment: 12-DEC-2002
> 2 1 Title segment: Programming the Perl
> 3 1 Title segment: MySQL made easier
> 4 1 Title segment: MySQL made easy
> [8 rows of 3 fields returned]
>
> #/usr/local/bin/perl
>
> require 5.6.0;
> use strict;
> use warnings;
>
> use DBI;
>
> my $dbh = DBI->connect();
>
> $dbh->{AutoCommit} = 0;
> $dbh->{RaiseError} = 1;
> $dbh->{PrintError} = 1;
>
> # Select segments.
> my $sel_seg_sql = q{
> select
> segment
> from books
> where book_id = ?
> order by id ASC
> };
>
> # Book ID
> my $id = 1;
>
> # Using a utility method in DBI.
> # $ary_ref = $dbh->selectcol_arrayref($statement, \%attr, @bind_values);
>
> my $seg_ref = $dbh->selectcol_arrayref( $sel_seg_sql, undef, $id );
>
> # Bring all the segments to together.
>
> my $segment = join( " ", @$seg_ref );
>
> print "Book id: $id\nSegment: $segment\n";
>
>
> exit;
>
> END {
> $dbh->disconnect if $dbh;
> }
>
>
> Tom
>
> On Fri, Aug 17, 2001 at 12:16:55PM -0400, Jeff Suszczynski wrote:
> > Hello:
> >
> > Relevant background info: I program in an academic library, using
> > Perl/DBI to connect to our Oracle8 database and query information
> > about our books, etc.. Each book has a record, called a MARC record,
> > which contains various information about Title, Size, Call Number,
> > etc. This MARC record is contained in one or more record segments in
> > the database. What I need to do for my latest project is string these
> > record segments together to form the whole MARC record.
> >
> > So for every book that has ID=X, I need to concatenate the record
> > segments into a unified whole, so that I can use the Perl module
> > MARC.pm which parses through the various parts of a MARC record to
> > give very granular results... The catch : MARC.pm can only recognize
> > whole MARC records, not a record segment that may be lopped off in the
> > middle of a field somewhere, which is why I need to concatenate and
> > create only one "supersegment" for each ID number.
> >
> > Any ideas on how to do this within the return loop of a DBI query?
> >
> > A rough example of oversimplified code is below:
> >
> > use DBI;
> > ### Grab the ID and Record Segments ###
> > select
> > id
> > segment
> > from
> > table1
> > where
> > id > 52
> > id < 99
> >
> > while (@row = $sth->fetchrow_array)
> > {
> >
> > $id = $row[0];
> > $seg = $row[1];
> >
> > then, I need something like (sorry for the mix of Perl and English) -
> >
> > if ($id = another $id during the loop)
> > {
> > pull together the $seg from each $id and call the new "supersegment" $full_record;
> > }
> > ### Basically, I am trying to make it so that if two or more record
> > ### segments exist for a single ID, collapse those record segments by
> > ### joining them together ###
> >
> > use Marc.pm;
> > ### Now parse through the MARC record with my newly created "Supersegments" ###
> > etc.
> > etc.
> >
> > Thanks in advance for your help on this hard-to-describe problem...
>
--
Thomas A. Lowery
See DBI/FAQ http://tlowery.hypermart.net
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com