HISinOne-Doku: SP-Extrakt- Changelog:20160501 - KDV-FH

Werbung
HISinOne-Doku: SP-ExtraktChangelog:20160501
Inhaltsverzeichnis

1 Änderungen an den Extraktionsskripten
o 1.1 Überblick
o 1.2 Hinweise
o 1.3 HZBArt (Satzart) erweitern
o 1.4 HZBSchulart (Satzart) erzeugen
o 1.5 HZBTyp (Satzart) erzeugen
o 1.6 allgemeine Änderungen
Änderungen an den Extraktionsskripten
(15.05.2015 bis 01.05.2016)
Überblick
Neuerungen:




neue Spalten HZBArt.csv
neue Datei HZBSchulart.csv
neue Datei HZBTyp.csv
allgemeine Änderungen
Hinweise
Bisher sollte die Tabelle HZB-Art-Gruppe die verschiedenen HZB-Arten genauer gruppieren.
Da diese Gruppierungen jedoch von jeder Hochschule frei geschaffen werden können, soll
dies nun vereinheitlicht werden. Dazu werden 2 neue Tabellen eingeführt die
hochschulübergreifend die verschieden HZB-Arten genauer erklären. Diese sind HZBSchulart und HZB-Typ. HZB-Schulart ist ähnlich zur alten Tabelle HZB-Art-Gruppe, nur das
die Bezeichnungen allgemein für alle Hochschulen gelten. Sie enthält Daten zur Schulart, z.B.
Gymnasium, FOS, BOS. Da in den verschiedenen Schularten verschiedene
Hochschulzulassungsberechtigungen erworben werden können beinhaltet die Tabelle HZBTyp die genauen Abschlüsse wie z.B. allgemeine Hochschulreife, fachbundene
Hochschulreife, BachelorUni, BachelorHS, MasterUni, MasterHS usw. Neben den beiden
neuen Tabellen muss die vorhandenen Tabelle HZBArt erweitert werden.
HZBArt (Satzart) erweitern
Damit der KDV-Extraktor die neue CSV-Datei erzeugen kann muss das Kdv-ExtraktorSchema erweitert werden. Dies passiert durch das Preprocessing-SQL im Extraktor. Bitte
ersetzen Sie das alte SQL mit dem Folgenden:
/*
* Tabelle für HZBArtMapping vorbereiten, wenn sie noch nicht existiert.
*/
CREATE OR REPLACE FUNCTION kdv_extraktor.kdv_create_extraktor_hzbartmapping()
RETURNS VARCHAR(256) AS $$
BEGIN
IF NOT EXISTS(SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME =
'mapping_hzbart_hzbartgruppe') THEN
CREATE TABLE kdv_extraktor.mapping_hzbart_hzbartgruppe(HZBArtGruppe_KNZ
VARCHAR(10), HZBArt_KNZ VARCHAR(10) NOT NULL, HZBArt_KURZBEZ VARCHAR(256), PRIMARY
KEY (HZBArt_KNZ));
INSERT INTO kdv_extraktor.mapping_hzbart_hzbartgruppe SELECT DISTINCT NULL AS
HZBArtGruppe_KNZ, k_hzbart.hzbart AS HZBArt_KNZ, k_hzbart.ktxt AS HZBArt_KURZBEZ
FROM k_hzbart;
END IF;
IF NOT EXISTS(SELECT column_name FROM information_schema.COLUMNS WHERE column_name
= 'hzbtyp_knz' AND TABLE_NAME = 'mapping_hzbart_hzbartgruppe') THEN
ALTER TABLE kdv_extraktor.mapping_hzbart_hzbartgruppe ADD hzbtyp_knz
VARCHAR(10);
ALTER TABLE kdv_extraktor.mapping_hzbart_hzbartgruppe ADD hzbschulart_knz
VARCHAR(10);
/* Default-Werte-Zuordnung "HZBSchulart_KNZ" */
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbschulart_knz = 'AUS'
WHERE hzbart_knz IN ('79','39','59');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbschulart_knz = 'BOS'
WHERE hzbart_knz IN ('21','47','65','44');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbschulart_knz = 'BQU'
WHERE hzbart_knz IN ('53','73','71','34');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbschulart_knz = 'FOS'
WHERE hzbart_knz IN ('67','66','48','28');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbschulart_knz = 'GYM'
WHERE hzbart_knz IN ('18','17','64','60','27','70','43','03');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbschulart_knz = 'SON'
WHERE hzbart_knz IN
('95','72','29','46','98','99','15','35','51','91','75','86','87','83','85','81','8
2','84','68','94',
'76','09','30','49','55','24','33','12','45','78','93','92','74','52','77','37','06
','31','62','96');
/* Default-Werte-Zuordnung "HZBTyp_KNZ" */
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'aHR' WHERE
hzbart_knz IN
('28','17','03','09','24','33','12','37','06','15','35','91','21','34','27','18','3
1','29');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'FHR' WHERE
hzbart_knz IN
('73','71','67','70','62','66','64','68','76','78','93','74','77','75','72','65','6
0');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'fgHR' WHERE
hzbart_knz IN ('44','43','46','51','48','49','55','45','47','92','52','53');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'fgHR Ausld'
WHERE hzbart_knz IN ('59');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'FHR Ausld'
WHERE hzbart_knz IN ('79');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'aHR Ausld'
WHERE hzbart_knz IN ('39');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'FHR o.A.'
WHERE hzbart_knz IN ('96');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'fgHR o.A.'
WHERE hzbart_knz IN ('95');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'aHR o.A.'
WHERE hzbart_knz IN ('94');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'bachelorU'
WHERE hzbart_knz IN ('82');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe SET hzbtyp_knz = 'masterU'
WHERE hzbart_knz IN ('84');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe
WHERE hzbart_knz IN ('86');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe
WHERE hzbart_knz IN ('81');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe
WHERE hzbart_knz IN ('83');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe
WHERE hzbart_knz IN ('85');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe
hzbart_knz IN ('99');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe
WHERE hzbart_knz IN ('87');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe
WHERE hzbart_knz IN ('98');
UPDATE kdv_extraktor.mapping_hzbart_hzbartgruppe
WHERE hzbart_knz IN ('30');
SET hzbtyp_knz = 'diplomU'
SET hzbtyp_knz = 'bachelorFH'
SET hzbtyp_knz = 'masterFH'
SET hzbtyp_knz = 'diplomFH'
SET hzbtyp_knz = 'o.A.' WHERE
SET hzbtyp_knz = 'allgHS'
SET hzbtyp_knz = 'Stb.o.HR'
SET hzbtyp_knz = 'Eig.Pr.MHS'
END IF;
RETURN 'SUCCESS';
END;
$$ LANGUAGE plpgsql;
SELECT kdv_extraktor.kdv_create_extraktor_hzbartmapping();
DROP FUNCTION IF EXISTS kdv_extraktor.kdv_create_extraktor_hzbartmapping();
Anschließend ersetzen sie das Extraktions-SQL mit folgendem SQL oder fügen Sie die Zeilen
die am Ende mit "neu" markiert sind, dazu:
SELECT '@@MANDANT' AS Mandant,
k_hzbart.hzbart AS HZBArt_KNZ,
TRIM(k_hzbart.ktxt) AS HZBArt_KURZBEZ,
TRIM(k_hzbart.ltxt) AS HZBArt_LANGBEZ,
k_hzbart.astat AS HZBArt_AMT_ID,
mapping.HZBArtGruppe_KNZ AS HZBArtGruppe_KNZ,
mapping.HZBSchulart_KNZ AS HZBSchulart_KNZ, -- neu
mapping.HZBTyp_KNZ AS HZBTyp_KNZ --neu
FROM k_hzbart
LEFT JOIN kdv_extraktor.mapping_hzbart_hzbartgruppe AS mapping
ON k_hzbart.hzbart=mapping.HZBArt_KNZ
HZBSchulart (Satzart) erzeugen
Um die HZBSchulart.csv generieren zu können muss ein neuer Extraktor angelget werden,
mit folgendem Extraktions-SQL und Preprocessing-SQL.
Extraktionss-SQL:
SELECT '@@MANDANT' AS Mandant,
hzbschulart_knz, hzbschulart_kurzbez, hzbschulart_langbez
FROM kdv_extraktor.custom_hzbschulart;
Preprocessing-SQL:
/*
* Tabelle für HZBArtMapping vorbereiten, wenn sie noch nicht existiert.
*/
CREATE OR REPLACE FUNCTION kdv_extraktor.kdv_create_extraktor_custom_hzbschulart()
RETURNS VARCHAR(256) AS $$
BEGIN
IF NOT EXISTS(SELECT TABLE_NAME FROM information_schema.TABLES WHERE
LOWER(TABLE_NAME) = LOWER('custom_hzbschulart')) THEN
CREATE TABLE IF NOT EXISTS kdv_extraktor.custom_hzbschulart
(hzbschulart_knz VARCHAR(10) NOT NULL,
hzbschulart_kurzbez VARCHAR(256),
hzbschulart_LANGBEZ VARCHAR(256), PRIMARY KEY (hzbschulart_KNZ));
INSERT INTO kdv_extraktor.custom_hzbschulart VALUES
('AUS', 'Ausland', 'HZB im Ausland'),
('BOS', 'BOS', 'Berufsoberschule'),
('BQU', 'BQU', 'Beruflich Qualifizierte'),
('FOS', 'FOS', 'Fachoberschule'),
('GYM', 'GYM', 'Gymnasium'),
('SON', 'Sonstige', 'Sonstige');
RETURN 'SUCCESS';
END IF;
RETURN 'NOTHING_DONE';
END;
$$ LANGUAGE plpgsql;
SELECT kdv_extraktor.kdv_create_extraktor_custom_hzbschulart();
DROP FUNCTION IF EXISTS kdv_extraktor.kdv_create_extraktor_custom_hzbschulart();
HZBTyp (Satzart) erzeugen
Um die HZBTyp.csv generieren zu können muss ein neuer Extraktor angelegt werden, mit
folgendem Extraktions-SQL und Preprocessing-SQL.
Extraktionss-SQL:
SELECT '@@MANDANT' AS Mandant,
hzbtyp_knz, hzbtyp_kurzbez, hzbtyp_langbez
FROM kdv_extraktor.custom_hzbtyp;
Preprocessing-SQL:
/*
* Tabelle für custom_hzbtyp vorbereiten, wenn sie noch nicht existiert.
*/
CREATE OR REPLACE FUNCTION kdv_extraktor.kdv_create_extraktor_custom_hzbtyp()
RETURNS VARCHAR(256) AS $$
BEGIN
IF NOT EXISTS(SELECT TABLE_NAME FROM information_schema.TABLES WHERE
LOWER(TABLE_NAME) = LOWER('custom_hzbtyp')) THEN
CREATE TABLE IF NOT EXISTS kdv_extraktor.custom_hzbtyp
(hzbtyp_knz VARCHAR(10) NOT NULL,
hzbtyp_kurzbez VARCHAR(256),
hzbtyp_LANGBEZ VARCHAR(256), PRIMARY KEY (hzbtyp_knz));
INSERT INTO kdv_extraktor.custom_hzbtyp VALUES
('Stb.o.HR', 'Stb. ohne Hochschulreife', 'Studienberechtigung ohne
Hochschulreife'),('o.A.', 'ohne Angaben', 'ohne Angaben'),('masterU', 'Master Uni',
'Master Uni'),
('masterFH', 'Master FH', 'Master FH'),('FHR o.A.', 'FHR ohne Angaben',
'Fachhochschulreife ohne Angaben'),('FHR Ausld', 'FHR Ausland', 'Fachhochschulreife
Ausland'),
('FHR', 'FHR', 'Fachhochschulreife'),('fgHR o.A.', 'fgHR ohne Angaben',
'fachgebundene Hochschulreife ohne Angaben'),('fgHR Ausld', 'fgHR Ausland',
'fachgebundene Hochschulreife Ausland'),
('fgHR', 'fgHR', 'fachgebundene Hochschulreife'),('Eig.Pr.MHS',
'Eignprfg.Kunst-u.MusikHS.', 'Eignungsprüfung Kunst- und
Musikhochschulen'),('diplomU', 'dipl. UNI', 'diplom UNI'),
('diplomFH', 'dipl FH', 'diplom FH'),('bachelorU', 'Bachelor UNI', 'Bachelor
UNI'),('bachelorFH', 'Bachelor FH', 'Bachelor FH'),
('allgHS', 'allg. Hochschulabschluss', 'allgemeiner Hochschulabschluss'),('aHR
o.A.', 'aHR ohne Angaben', 'allgemeine Hochschulreife ohne Angaben'),
('aHR Ausld', 'aHR Ausland', 'allgemeine Hochschulreife Ausland'),('aHR',
'aHR', 'allgemeine Hochschulreife');
RETURN 'SUCCESS';
END IF;
RETURN 'NOTHING_DONE';
END;
$$ LANGUAGE plpgsql;
SELECT kdv_extraktor.kdv_create_extraktor_custom_hzbtyp();
DROP FUNCTION IF EXISTS kdv_extraktor.kdv_create_extraktor_custom_hzbtyp();
allgemeine Änderungen
Unabhängig von den Neuerungen die HZB-Art usw. betreffen, könnte bei einer ungünstigen
Kombination von veralterten Extraktionsskripten ein Fehler auftreten. Bestimmte SQLBefehle werden dabei in falscher Reihenfolge ausgeführt. Falls bei Ihnen ein Fehler beim
extrahieren der Praktikum.csv auftritt, so laden Sie entweder die aktuellen Extraktionsskripte
vom Server oder bauen Sie die Skripte manuell um. Dabei muss der folgende SQL-Block aus
der Prüfung.csv (Preprocessing)entnommen werden und in die Praktikum.csv
(Preprocessing)eingefügt werden:
/*
* aus Student.csv hierher verschoben, da sich die Sortierreihenfolge der Jobs
geändert hat
* siehe Bugzilla Ticket 671
* Aufbau einer Funktion, die initial eine Tabelle zur Verwaltung der
verschlüsselten
* Matrikelnummern generiert und dann bei weiteren Vorgängen immer um die neu
hinzugekommenen
* erweitert.
*/
CREATE OR REPLACE FUNCTION kdv_extraktor.kdv_prefetch_mtknr() RETURNS void AS
$$
BEGIN
DROP TABLE IF EXISTS kdv_extraktor.studenten_enc_mtknr_prefetch;
CREATE TABLE kdv_extraktor.studenten_enc_mtknr_prefetch
(
mtknr INTEGER,
mtknr_md5 text,
nachname text,
vorname text,
gebdat DATE,
gebort CHARACTER(25),
geschl CHARACTER(1),
semester SMALLINT
)
WITH (
OIDS=FALSE
);
IF NOT EXISTS( SELECT * FROM information_schema.TABLES
WHERE table_schema = 'kdv_extraktor' AND TABLE_NAME = 'studenten_enc_mtknr' )
THEN
/*
* Initiale Generierung der Tabellen studenten_enc_mtknr_prefetch und
studenten_enc_mtknr
*/
INSERT INTO kdv_extraktor.studenten_enc_mtknr_prefetch
SELECT mtknr,
md5(TRIM(to_char(mtknr, '999999999')) ||
TRIM(to_char(trunc(random()*100000), '9999999'))) AS mtknr_md5,
TRIM(nachname) AS nachname,
TRIM(vorname) AS vorname,
gebdat,
gebort,
geschl,
semester -- Semester des SOS-Satzes
FROM sos;
/*
* Index generieren um Lesezugriff zu beschleunigen
*/
CREATE INDEX studenten_enc_mtknr_prefetch_idx
ON kdv_extraktor.studenten_enc_mtknr_prefetch (nachname, vorname, gebdat,
gebort, geschl);
CREATE INDEX studenten_enc_mtknr_prefetch_idx2
ON kdv_extraktor.studenten_enc_mtknr_prefetch (nachname, vorname, gebdat,
gebort, mtknr, geschl);
CREATE INDEX studenten_enc_mtknr_prefetch_idx3
ON kdv_extraktor.studenten_enc_mtknr_prefetch (mtknr);
ELSE
/*
* Fall Tabelle existiert bereits:
* Befüllen der Tabelle studenten_enc_mtknr mit fehlenden Werten
*/
/*
* Befüllen der Tabelle studenten_enc_mtknr_prefetch
*/
INSERT INTO kdv_extraktor.studenten_enc_mtknr_prefetch
SELECT mtknr,
md5(TRIM(to_char(mtknr, '999999999')) ||
TRIM(to_char(trunc(random()*100000), '9999999'))) AS mtknr_md5,
TRIM(nachname) AS nachname,
TRIM(vorname) AS vorname,
gebdat,
gebort,
geschl,
semester -- imma semester
FROM sos;
-- Bereits verwendete Matrikelnummern rauslöschen
DELETE FROM kdv_extraktor.studenten_enc_mtknr_prefetch p
WHERE p.mtknr IN (SELECT mtknr FROM kdv_extraktor.studenten_enc_mtknr WHERE
mtknr = p.mtknr) OR p.mtknr IS NULL;
-- Rest mit den bereits verwendeten Matrikelnummern und deren verschlüsselten
Werten auffüllen
INSERT INTO kdv_extraktor.studenten_enc_mtknr_prefetch
SELECT mtknr, mtknr_md5, nachname, vorname, gebdat, gebort, geschl, semester2
AS semester
FROM kdv_extraktor.studenten_enc_mtknr;
END IF;
END;
$$
LANGUAGE 'plpgsql';
/*
* Ausführen der Funktion kdv_update_enc_mtknr()
*/
SELECT kdv_extraktor.kdv_prefetch_mtknr();
-- Löschen, denn die Inhalte sind jetzt ja in studenten_enc_mtknr_prefetch
gesichert ???
DROP TABLE IF EXISTS kdv_extraktor.studenten_enc_mtknr;
CREATE TABLE kdv_extraktor.studenten_enc_mtknr
(
mtknr INTEGER,
mtknr_md5 text,
mtknr_md5_short text,
nachname VARCHAR(256),
vorname VARCHAR(256),
gebdat DATE,
gebort CHARACTER(25),
geschl CHARACTER(1),
semester1 SMALLINT,
semester2 SMALLINT
)
WITH (
OIDS=FALSE
);
CREATE INDEX studenten_enc_mtknr_idx
ON kdv_extraktor.studenten_enc_mtknr (mtknr);
/*
* Eigentliche Mapping-Tabelle studenten_enc_mtknr generieren
*/
CREATE OR REPLACE FUNCTION kdv_extraktor.kdv_update_enc_mtknr() RETURNS void AS
$$
BEGIN
IF '1' = '@@MAP_STUDENTS' THEN
-- Kopieren der Daten aus Prefetch (mit Matrikelnummer-Mapping)
WITH cte_studenten_min_mtknr (nachname, vorname, gebdat, gebort, geschl, mtknr)
AS
(
SELECT nachname, vorname, gebdat, gebort, geschl, MIN(mtknr) AS minsemester
FROM kdv_extraktor.studenten_enc_mtknr_prefetch
GROUP BY nachname, vorname, gebdat, gebort, geschl
)
INSERT INTO kdv_extraktor.studenten_enc_mtknr
SELECT b.mtknr, a.mtknr_md5, substr(a.mtknr_md5, 0, 15) AS mtknr_md5_short,
b.nachname, b.vorname, b.gebdat, b.gebort, b.geschl, a.semester AS semester1,
b.semester AS semester2
FROM kdv_extraktor.studenten_enc_mtknr_prefetch a
INNER JOIN cte_studenten_min_mtknr cmin
ON a.nachname = cmin.nachname
AND a.vorname = cmin.vorname
AND a.gebdat = cmin.gebdat
AND a.gebort = cmin.gebort
AND a.mtknr = cmin.mtknr
AND a.geschl = cmin.geschl
INNER JOIN kdv_extraktor.studenten_enc_mtknr_prefetch b
ON a.nachname = b.nachname
AND a.vorname = b.vorname
AND a.gebdat = b.gebdat
AND a.gebort = b.gebort
AND a.geschl = b.geschl
ORDER BY nachname, vorname, gebdat, gebort, geschl;
ELSE
-- Kopieren der Daten aus Prefetch (ohne Matrikelnummer-Mapping)
INSERT INTO kdv_extraktor.studenten_enc_mtknr
SELECT mtknr, mtknr_md5, substr(mtknr_md5, 0, 15) AS mtknr_md5_short,
nachname, vorname, gebdat, gebort, geschl, semester AS semester1, semester AS
semester2
FROM kdv_extraktor.studenten_enc_mtknr_prefetch;
END IF;
END;
$$
LANGUAGE 'plpgsql';
SELECT kdv_extraktor.kdv_update_enc_mtknr();
Herunterladen