X-Git-Url: http://git.equinoxoli.org/?p=migration-tools.git;a=blobdiff_plain;f=sql%2Fbase%2F01-marc.sql;fp=sql%2Fbase%2F01-marc.sql;h=483d8d4c8a68a51db36924c7005ce7b6fb926400;hp=074ec427d3c0a96bd21dda654b85194f552f6315;hb=adcd71916637bf6b3db24e3ad7599e26472de096;hpb=712e998c34b3cfd0eef71f99acbf3c82647fd81a diff --git a/sql/base/01-marc.sql b/sql/base/01-marc.sql index 074ec42..483d8d4 100644 --- a/sql/base/01-marc.sql +++ b/sql/base/01-marc.sql @@ -1,3 +1,47 @@ +DROP FUNCTION IF EXISTS migration_tools.strip_subfield(TEXT,CHAR(3),CHAR(1)); +CREATE OR REPLACE FUNCTION migration_tools.strip_subfield(marc TEXT, tag CHAR(3), subfield CHAR(1)) + RETURNS TEXT + LANGUAGE plperlu +AS $function$ +use strict; +use warnings; + +use MARC::Record; +use MARC::File::XML (BinaryEncoding => 'utf8'); + +binmode(STDERR, ':bytes'); +binmode(STDOUT, ':utf8'); +binmode(STDERR, ':utf8'); + +my $marc_xml = shift; +my $tag = shift; +my $subfield = shift; +$marc_xml =~ s/(.........)./${1}a/; + +eval { + $marc_xml = MARC::Record->new_from_xml($marc_xml); +}; +if ($@) { + #elog("could not parse: $@\n"); + import MARC::File::XML (BinaryEncoding => 'utf8'); + return $marc_xml; +} + +my @fields = $marc_xml->field($tag); +return $marc_xml->as_xml_record() unless @fields; + +$marc_xml->delete_fields(@fields); + +foreach my $f (@fields) { + $f->delete_subfield(code => '0'); +} +$marc_xml->insert_fields_ordered(@fields); + +return $marc_xml->as_xml_record(); + +$function$; + + CREATE OR REPLACE FUNCTION migration_tools.set_leader (TEXT, INT, TEXT) RETURNS TEXT AS $$ my ($marcxml, $pos, $value) = @_;