2 -- pass it the biblionumber, the position of the character to start in the leader starting at 0
3 -- and the text to replace, single characer or multiple
4 DROP FUNCTION IF EXISTS m_update_leader;
7 m_update_leader(bnumber INTEGER, ldr_position SMALLINT, new_value TEXT)
11 DECLARE ldr TEXT COLLATE utf8mb4_unicode_ci DEFAULT NULL;
12 DECLARE new_value_length SMALLINT DEFAULT 1;
13 SET ldr_position = ldr_position + 1;
14 SET new_value_length = LENGTH(new_value);
16 SELECT ExtractValue(metadata, '//leader') INTO ldr FROM biblio_metadata WHERE biblionumber = bnumber;
17 SET ldr = INSERT(ldr,ldr_position,new_value_length,new_value);
18 SET ldr = CONCAT('<leader>',ldr,'</leader>');
20 UPDATE biblio_metadata SET metadata = UpdateXML(metadata, '//leader', ldr) where biblionumber = bnumber;
27 -- pass it the biblionumber and the 003 value (MARC org code) and it'll set the 003
28 -- to the passed value for the referenced bib
29 DROP FUNCTION IF EXISTS m_update_003;
32 m_update_003(bnumber INTEGER, marc_org_code TEXT COLLATE utf8mb4_unicode_ci)
36 DECLARE ldr TEXT COLLATE utf8mb4_unicode_ci DEFAULT NULL;
37 DECLARE tag003_count INT DEFAULT NULL;
38 DECLARE marcxml TEXT COLLATE utf8mb4_unicode_ci DEFAULT NULL;
40 SELECT metadata INTO marcxml FROM biblio_metadata WHERE biblionumber = bnumber;
41 SELECT ExtractValue(metadata,'//leader') INTO ldr FROM biblio_metadata WHERE biblionumber = bnumber;
42 SELECT ExtractValue(metadata,'count(//controlfield[@tag="003"])') INTO tag003_count FROM biblio_metadata WHERE biblionumber = bnumber;
44 IF NULLIF(ldr,'') IS NULL THEN -- we need a leader
48 IF tag003_count > 1 THEN -- we need one or zero of these; it shouldn't be repeatable
52 -- handle 003 (insert or edit)
53 IF tag003_count = 0 THEN
54 SET marcxml = UpdateXML(
58 '<leader>',ldr,'</leader>\n',
59 ' <controlfield tag="003">',marc_org_code,'</controlfield>'
63 SET marcxml = UpdateXML(
65 '//controlfield[@tag="003"]',
67 '<controlfield tag="003">',marc_org_code,'</controlfield>'
72 UPDATE biblio_metadata SET metadata = marcxml where biblionumber = bnumber;