3 INSERT INTO config.upgrade_log (version) VALUES ('0036'); -- miker
5 CREATE OR REPLACE FUNCTION biblio.flatten_marc ( rid BIGINT ) RETURNS SETOF metabib.full_rec AS $func$
7 bib biblio.record_entry%ROWTYPE;
8 output metabib.full_rec%ROWTYPE;
11 SELECT INTO bib * FROM biblio.record_entry WHERE id = rid;
13 FOR field IN SELECT * FROM biblio.flatten_marc( bib.marc ) LOOP
15 output.ind1 := field.ind1;
16 output.ind2 := field.ind2;
17 output.tag := field.tag;
18 output.subfield := field.subfield;
19 IF field.subfield IS NOT NULL THEN
20 output.value := naco_normalize(field.value, field.subfield);
22 output.value := field.value;
28 $func$ LANGUAGE PLPGSQL;
30 CREATE OR REPLACE FUNCTION biblio.flatten_marc ( TEXT ) RETURNS SETOF metabib.full_rec AS $func$
36 my $r = MARC::Record->new_from_xml( $xml );
38 return_next( { tag => 'LDR', value => $r->leader } );
40 for my $f ( $r->fields ) {
41 if ($f->is_control_field) {
42 return_next({ tag => $f->tag, value => $f->data });
44 for my $s ($f->subfields) {
47 ind1 => $f->indicator(1),
48 ind2 => $f->indicator(2),
53 if ( $f->tag eq '245' and $s->[0] eq 'a' ) {
54 my $trim = $f->indicator(2) || 0;
57 ind1 => $f->indicator(1),
58 ind2 => $f->indicator(2),
60 value => substr( $s->[1], $trim )
69 $func$ LANGUAGE PLPERLU;