3 INSERT INTO config.upgrade_log (version) VALUES ('0519'); -- miker
5 CREATE OR REPLACE FUNCTION vandelay.marc21_extract_all_fixed_fields( marc TEXT ) RETURNS SETOF biblio.record_ff_map AS $func$
10 output biblio.record_ff_map%ROWTYPE;
12 rtype := (vandelay.marc21_record_type( marc )).code;
14 FOR ff_pos IN SELECT * FROM config.marc21_ff_pos_map WHERE rec_type = rtype ORDER BY tag DESC LOOP
15 output.ff_name := ff_pos.fixed_field;
16 output.ff_value := NULL;
18 IF ff_pos.tag = 'ldr' THEN
19 output.ff_value := oils_xpath_string('//*[local-name()="leader"]', marc);
20 IF output.ff_value IS NOT NULL THEN
21 output.ff_value := SUBSTRING( output.ff_value, ff_pos.start_pos + 1, ff_pos.length );
23 output.ff_value := NULL;
26 FOR tag_data IN SELECT value FROM UNNEST( oils_xpath( '//*[@tag="' || UPPER(ff_pos.tag) || '"]/text()', marc ) ) x(value) LOOP
27 output.ff_value := SUBSTRING( tag_data, ff_pos.start_pos + 1, ff_pos.length );
28 IF output.ff_value IS NULL THEN output.ff_value := REPEAT( ff_pos.default_val, ff_pos.length ); END IF;
30 output.ff_value := NULL;
38 $func$ LANGUAGE PLPGSQL;