de.svws_nrw.db.schema.revisionen.Revision1Updates Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of svws-db Show documentation
Show all versions of svws-db Show documentation
Diese Bibliothek regelt den Zugriff auf Datenbanken für die Schulverwaltungssoftware in NRW
package de.svws_nrw.db.schema.revisionen;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import de.svws_nrw.core.types.benutzer.BenutzerKompetenz;
import de.svws_nrw.core.types.schule.Schulgliederung;
import de.svws_nrw.db.schema.Schema;
import de.svws_nrw.db.schema.SchemaRevisionUpdateSQL;
import de.svws_nrw.db.schema.SchemaRevisionen;
/**
* Diese Klasse enthält die SQL-Befehle für Revisions-Updates
* auf Revision 1.
*/
public final class Revision1Updates extends SchemaRevisionUpdateSQL {
/**
* Erzeugt eine Instanz für die Revisions-Updates
* für Revision 1.
*/
public Revision1Updates() {
super(SchemaRevisionen.REV_1);
erzeugeFehlendeSchuljahreabschnitte();
pruefeKatalogReligion();
pruefeKatalogErzieherArt();
pruefeKatalogOrtsteile();
pruefeKatalogOrte();
passeVerkehrsspracheAn();
pruefeFremdschluessel();
pruefeFremdschluessel2();
pruefeLeistungsdatenUndFachbemerkungen();
passeSprachenfolgeAn();
pruefeLeistungsdatenUndLernabschnittsdaten();
pruefeWeitereDaten();
pruefeAbiturtabellen();
erstelleNeueKlassenTabelle();
passeLehrerTabelleAn();
pruefeWeitereDaten2();
passeBenutzerTabellenAn();
korrigiereFachkombinationen();
updateSchuelerNachnameZusatz();
uebertrageLehrerStammschule();
verschiebeDatenVonEigeneSchule();
korrigiereCaseUbergangsempfehlungenUndSchulformen();
}
private void erzeugeFehlendeSchuljahreabschnitte() {
add("Erzeuge fehlende Schuljahresabschnitte, sofern sie zwischen dem ersten und letzten existierenden Abschnitt liegen",
"""
INSERT INTO Schuljahresabschnitte(Jahr, Abschnitt)
SELECT Jahr, Abschnitt FROM
(SELECT DISTINCT Jahr FROM Schuljahresabschnitte ORDER BY Jahr) a,
(SELECT seq AS Abschnitt FROM seq_1_to_4 WHERE seq <= (SELECT AnzahlAbschnitte FROM EigeneSchule)) b
WHERE ((Jahr = (SELECT max(Jahr) FROM Schuljahresabschnitte) AND Abschnitt < (SELECT max(Abschnitt) FROM Schuljahresabschnitte WHERE Jahr = (SELECT max(Jahr) FROM Schuljahresabschnitte)))
OR ((Jahr < (SELECT max(Jahr) FROM Schuljahresabschnitte)) AND (Jahr > (SELECT min(Jahr) FROM Schuljahresabschnitte)))
OR (Jahr = (SELECT min(Jahr) FROM Schuljahresabschnitte) AND Abschnitt > (SELECT min(Abschnitt) FROM Schuljahresabschnitte WHERE Jahr = (SELECT min(Jahr) FROM Schuljahresabschnitte)))
) AND (Jahr, Abschnitt) NOT IN (SELECT Jahr, Abschnitt FROM Schuljahresabschnitte)
ORDER BY Jahr DESC, Abschnitt DESC
""",
Schema.tab_Schuljahresabschnitte, Schema.tab_EigeneSchule
);
}
private void pruefeKatalogReligion() {
add("Korrigiere Religion_ID, falls ein Katalog-Eintrag doppelt vorkommt (z.B. bei SchildZentral-Dbs)",
"""
UPDATE Schueler
JOIN (
SELECT
SUM(CASE WHEN SchulnrEigner <> 0 THEN ID ELSE null END) AS ID_ORIG,
SUM(CASE WHEN SchulnrEigner = 0 THEN ID ELSE null END) AS ID_REPLACE
FROM K_Religion
GROUP BY Bezeichnung
HAVING count(ID) = 2 AND SUM(CASE WHEN SchulnrEigner = 0 THEN 1 ELSE 2 END) = 3
) mapping ON Schueler.Religion_ID = mapping.ID_ORIG
SET Schueler.Religion_ID = mapping.ID_REPLACE
""",
Schema.tab_K_Religion, Schema.tab_Schueler
);
add("Entferne ID, falls ein Religions-Katalog-Eintrag doppelt vorkommt (z.B. bei SchildZentral-Dbs)",
"""
DELETE FROM K_Religion
WHERE ID IN (
SELECT
SUM(CASE WHEN SchulnrEigner <> 0 THEN ID ELSE null END) AS ID_ORIG
FROM K_Religion
GROUP BY Bezeichnung
HAVING count(ID) = 2 AND SUM(CASE WHEN SchulnrEigner = 0 THEN 1 ELSE 2 END) = 3
)
""",
Schema.tab_K_Religion
);
}
private void pruefeKatalogErzieherArt() {
add("Korrigiere ErzieherArt_ID, falls ein Katalog-Eintrag doppelt vorkommt (z.B. bei SchildZentral-Dbs)",
"""
UPDATE SchuelerErzAdr
JOIN (
SELECT
SUM(CASE WHEN SchulnrEigner <> 0 THEN ID ELSE null END) AS ID_ORIG,
SUM(CASE WHEN SchulnrEigner = 0 THEN ID ELSE null END) AS ID_REPLACE
FROM K_ErzieherArt
GROUP BY Bezeichnung
HAVING count(ID) = 2 AND SUM(CASE WHEN SchulnrEigner = 0 THEN 1 ELSE 2 END) = 3
) mapping ON SchuelerErzAdr.ErzieherArt_ID = mapping.ID_ORIG
SET SchuelerErzAdr.ErzieherArt_ID = mapping.ID_REPLACE
""",
Schema.tab_K_ErzieherArt, Schema.tab_SchuelerErzAdr
);
add("Entferne ID, falls ein Erzieher-Art-Katalog-Eintrag doppelt vorkommt (z.B. bei SchildZentral-Dbs)",
"""
DELETE FROM K_ErzieherArt
WHERE ID IN (
SELECT
SUM(CASE WHEN SchulnrEigner <> 0 THEN ID ELSE null END) AS ID_ORIG
FROM K_ErzieherArt
GROUP BY Bezeichnung
HAVING count(ID) = 2 AND SUM(CASE WHEN SchulnrEigner = 0 THEN 1 ELSE 2 END) = 3
)
""",
Schema.tab_K_ErzieherArt
);
}
private void pruefeKatalogOrtsteile() {
add("Korrigiere Ortsteil_ID, falls ein Katalog-Eintrag doppelt vorkommt (z.B. bei SchildZentral-Dbs)",
"""
UPDATE Schueler
JOIN (
SELECT
SUM(CASE WHEN SchulnrEigner <> 0 THEN ID ELSE null END) AS ID_ORIG,
SUM(CASE WHEN SchulnrEigner = 0 THEN ID ELSE null END) AS ID_REPLACE
FROM K_Ortsteil
GROUP BY Bezeichnung
HAVING count(ID) = 2 AND SUM(CASE WHEN SchulnrEigner = 0 THEN 1 ELSE 2 END) = 3
) mapping ON Schueler.Ortsteil_ID = mapping.ID_ORIG
SET Schueler.Ortsteil_ID = mapping.ID_REPLACE
""",
Schema.tab_K_Ortsteil, Schema.tab_Schueler
);
add("Korrigiere ErzOrtsteil_ID, falls ein Katalog-Eintrag doppelt vorkommt (z.B. bei SchildZentral-Dbs)",
"""
UPDATE SchuelerErzAdr
JOIN (
SELECT
SUM(CASE WHEN SchulnrEigner <> 0 THEN ID ELSE null END) AS ID_ORIG,
SUM(CASE WHEN SchulnrEigner = 0 THEN ID ELSE null END) AS ID_REPLACE
FROM K_Ortsteil
GROUP BY Bezeichnung
HAVING count(ID) = 2 AND SUM(CASE WHEN SchulnrEigner = 0 THEN 1 ELSE 2 END) = 3
) mapping ON SchuelerErzAdr.ErzOrtsteil_ID = mapping.ID_ORIG
SET SchuelerErzAdr.ErzOrtsteil_ID = mapping.ID_REPLACE
""",
Schema.tab_K_Ortsteil, Schema.tab_SchuelerErzAdr
);
add("Entferne ID, falls ein Ortsteil-Katalog-Eintrag doppelt vorkommt (z.B. bei SchildZentral-Dbs)",
"""
DELETE FROM K_Ortsteil
WHERE ID IN (
SELECT
SUM(CASE WHEN SchulnrEigner <> 0 THEN ID ELSE null END) AS ID_ORIG
FROM K_Ortsteil
GROUP BY Bezeichnung
HAVING count(ID) = 2 AND SUM(CASE WHEN SchulnrEigner = 0 THEN 1 ELSE 2 END) = 3
)
""",
Schema.tab_K_Ortsteil
);
}
private void pruefeKatalogOrte() {
add("Entferne ID, falls ein Katalog-Eintrag doppelt vorkommt (z.B. bei SchildZentral-Dbs)",
"""
DELETE FROM K_Ort
WHERE ID IN (
SELECT
SUM(CASE WHEN SchulnrEigner <> 0 THEN ID ELSE null END) AS ID_ORIG
FROM K_Ort
GROUP BY PLZ, Bezeichnung
HAVING count(ID) = 2 AND SUM(CASE WHEN SchulnrEigner = 0 THEN 1 ELSE 2 END) = 3
)
""",
Schema.tab_K_Ort
);
}
private void passeVerkehrsspracheAn() {
add("Setze Verkehrssprache auf xx, wenn der bisherige Pseudo-Wert zz verwendet wurde",
"""
UPDATE Schueler
SET VerkehrsspracheFamilie = 'xx'
WHERE VerkehrsspracheFamilie = 'zz'
""",
Schema.tab_Schueler
);
}
private void pruefeFremdschluessel() {
add("Korrektur für den Fremdschluessel auf die Spalte AbteilungsLeiter der Tabelle EigeneSchule_Abteilungen",
"""
UPDATE EigeneSchule_Abteilungen
SET AbteilungsLeiter = NULL
WHERE AbteilungsLeiter NOT IN (
SELECT Kuerzel
FROM K_Lehrer
)
""",
Schema.tab_EigeneSchule_Abteilungen, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte Klasse der Tabelle EigeneSchule_Abt_Kl",
"DELETE FROM %s WHERE %s NOT IN (SELECT %s FROM %s)".formatted(Schema.tab_EigeneSchule_Abt_Kl.name(),
Schema.tab_EigeneSchule_Abt_Kl.col_Klasse.name(), Schema.tab_Versetzung.col_Klasse.name(), Schema.tab_Versetzung.name()));
add("Korrektur für den Fremdschluessel auf die Spalte FloskelGruppe der Tabelle Floskeln",
"""
UPDATE Floskeln
SET FloskelGruppe = NULL
WHERE FloskelGruppe NOT IN (
SELECT Kuerzel
FROM Floskelgruppen
)
""",
Schema.tab_Floskeln, Schema.tab_Floskelgruppen
);
add("Korrektur für den Fremdschluessel auf die Spalte EigeneSchule_Jahrgaenge der Tabelle Floskeln",
"""
UPDATE Floskeln
SET FloskelJahrgang = NULL
WHERE FloskelJahrgang NOT IN (
SELECT ASDJahrgang
FROM EigeneSchule_Jahrgaenge
)
""",
Schema.tab_Floskeln, Schema.tab_EigeneSchule_Jahrgaenge
);
add("Korrektur für den Fremdschluessel auf die Spalte AllgAdrAdressArt der Tabelle K_AllgAdresse",
"""
UPDATE K_AllgAdresse
SET AllgAdrAdressArt = NULL
WHERE AllgAdrAdressArt NOT IN (
SELECT Bezeichnung
FROM K_Adressart
)
""",
Schema.tab_K_Adressart, Schema.tab_K_AllgAdresse
);
add("Korrektur für den Fremdschluessel auf die Spalte Fach_ID der Tabelle K_Ankreuzfloskeln – Spalte IstASV nutzen",
"""
UPDATE K_Ankreuzfloskeln
SET IstASV = 1
WHERE Fach_ID = -1
""",
Schema.tab_K_Ankreuzfloskeln
);
add("Korrektur für den Fremdschluessel auf die Spalte Fach_ID der Tabelle K_Ankreuzfloskeln – Setze Fach-ID auf null bei ungültigen Werten",
"""
UPDATE K_Ankreuzfloskeln
SET Fach_ID = null
WHERE Fach_ID NOT IN (
SELECT ID
FROM EigeneSchule_Faecher
)
""",
Schema.tab_K_Ankreuzfloskeln, Schema.tab_EigeneSchule_Faecher
);
add("Korrektur für den Fremdschluessel auf die Spalte StaatKrz der Tabelle K_Lehrer",
"""
UPDATE K_Lehrer
SET StaatKrz = NULL
WHERE StaatKrz NOT IN (
SELECT DEStatisCode
FROM Nationalitaeten_Keys
)
""",
Schema.tab_K_Lehrer, Schema.tab_Nationalitaeten_Keys
);
add("Korrektur für den Fremdschluessel auf die Spalte Jahrgang_ID der Tabelle Kurse",
"""
UPDATE Kurse
SET Jahrgang_ID = NULL
WHERE Jahrgang_ID NOT IN (
SELECT ID
FROM EigeneSchule_Jahrgaenge
)
""",
Schema.tab_Kurse, Schema.tab_EigeneSchule_Jahrgaenge
);
add("Entferne Datensätze aus der Tabelle Kurse, bei denen keine gültige Fach_ID gesetzt ist",
"""
DELETE FROM Kurse
WHERE Fach_ID NOT IN (
SELECT ID
FROM EigeneSchule_Faecher
)
""",
Schema.tab_Kurse, Schema.tab_EigeneSchule_Faecher
);
add("Korrektur für den Fremdschluessel auf die Spalte DatumLoeschfristHinweisDeaktiviertUserID der Tabelle Schild_Verwaltung",
"""
UPDATE Schild_Verwaltung
SET DatumLoeschfristHinweisDeaktiviertUserID = NULL
WHERE DatumLoeschfristHinweisDeaktiviertUserID NOT IN (
SELECT ID FROM Users
)
""",
Schema.tab_Schild_Verwaltung, Schema.tab_Users
);
add("Korrektur für den Fremdschluessel auf die Spalte Einschulungsart_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Einschulungsart_ID = null
WHERE Einschulungsart_ID NOT IN (
SELECT ID
FROM K_EinschulungsArt
)
""",
Schema.tab_K_EinschulungsArt, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Entlassjahrgang_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Entlassjahrgang_ID = null
WHERE Entlassjahrgang_ID NOT IN (
SELECT ID
FROM EigeneSchule_Jahrgaenge
)
""",
Schema.tab_EigeneSchule_Jahrgaenge, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte FachklasseNSJ_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET FachklasseNSJ_ID = null
WHERE FachklasseNSJ_ID NOT IN (
SELECT ID
FROM EigeneSchule_Fachklassen
)
""",
Schema.tab_EigeneSchule_Fachklassen, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Fahrschueler_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Fahrschueler_ID = null
WHERE Fahrschueler_ID NOT IN (
SELECT ID
FROM K_FahrschuelerArt
)
""",
Schema.tab_K_FahrschuelerArt, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Haltestelle_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Haltestelle_ID = null
WHERE Haltestelle_ID NOT IN (
SELECT ID
FROM K_Haltestelle
)
""",
Schema.tab_K_Haltestelle, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Jahrgang_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Jahrgang_ID = null
WHERE Jahrgang_ID NOT IN (
SELECT ID
FROM EigeneSchule_Jahrgaenge
)
""",
Schema.tab_EigeneSchule_Jahrgaenge, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Kindergarten_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Kindergarten_ID = null
WHERE Kindergarten_ID NOT IN (
SELECT ID
FROM K_Kindergarten
)
""",
Schema.tab_K_Kindergarten, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Klasse der Tabelle Schueler",
"""
UPDATE Schueler
SET Klasse = null
WHERE Klasse NOT IN (
SELECT Klasse
FROM Versetzung
)
""",
Schema.tab_Versetzung, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Ortsteil_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Ortsteil_ID = NULL
WHERE Ortsteil_ID NOT IN (
SELECT ID
FROM K_Ortsteil
)
""",
Schema.tab_K_Ortsteil, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Religion_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Religion_ID = NULL
WHERE Religion_ID NOT IN (
SELECT ID FROM K_Religion
)
""",
Schema.tab_K_Religion, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte StaatKrz der Tabelle Schueler",
"""
UPDATE Schueler
SET StaatKrz = NULL
WHERE StaatKrz NOT IN (
SELECT DEStatisCode
FROM Nationalitaeten_Keys
)
""",
Schema.tab_Nationalitaeten_Keys, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte StaatKrz2 der Tabelle Schueler",
"""
UPDATE Schueler
SET StaatKrz2 = NULL
WHERE StaatKrz2 NOT IN (
SELECT DEStatisCode
FROM Nationalitaeten_Keys
)
""",
Schema.tab_Nationalitaeten_Keys, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte GeburtslandSchueler der Tabelle Schueler",
"""
UPDATE Schueler
SET GeburtslandSchueler = NULL
WHERE GeburtslandSchueler NOT IN (
SELECT DEStatisCode
FROM Nationalitaeten_Keys
)
""",
Schema.tab_Nationalitaeten_Keys, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte GeburtslandVater der Tabelle Schueler",
"""
UPDATE Schueler
SET GeburtslandVater = NULL
WHERE GeburtslandVater NOT IN (
SELECT DEStatisCode
FROM Nationalitaeten_Keys
)
""",
Schema.tab_Nationalitaeten_Keys, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte GeburtslandMutter der Tabelle Schueler",
"""
UPDATE Schueler
SET GeburtslandMutter = NULL
WHERE GeburtslandMutter NOT IN (
SELECT DEStatisCode
FROM Nationalitaeten_Keys
)
""",
Schema.tab_Nationalitaeten_Keys, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Schwerpunkt_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Schwerpunkt_ID = NULL
WHERE Schwerpunkt_ID NOT IN (
SELECT ID
FROM K_Schwerpunkt
)
""",
Schema.tab_K_Schwerpunkt, Schema.tab_Schueler
);
add("Korrektur für den Fremdschluessel auf die Spalte Sportbefreiung_ID der Tabelle Schueler",
"""
UPDATE Schueler
SET Sportbefreiung_ID = NULL
WHERE Sportbefreiung_ID NOT IN (
SELECT ID
FROM K_Sportbefreiung
)
""",
Schema.tab_K_Schwerpunkt, Schema.tab_Schueler
);
}
private void pruefeFremdschluessel2() {
add("Korrektur für den Fremdschluessel auf die Spalte Ansprechpartner_ID der Tabelle Schueler_AllgAdr",
"""
UPDATE Schueler_AllgAdr
SET Ansprechpartner_ID = NULL
WHERE Ansprechpartner_ID NOT IN (
SELECT ID
FROM AllgAdrAnsprechpartner
)
""",
Schema.tab_AllgAdrAnsprechpartner, Schema.tab_Schueler_AllgAdr
);
add("Korrektur für den Fremdschluessel auf die Spalte Vertragsart_ID der Tabelle Schueler_AllgAdr",
"""
UPDATE Schueler_AllgAdr
SET Vertragsart_ID = NULL
WHERE Vertragsart_ID NOT IN (
SELECT ID
FROM K_BeschaeftigungsArt
)
""",
Schema.tab_K_BeschaeftigungsArt, Schema.tab_Schueler_AllgAdr
);
add("Korrektur für den Fremdschluessel auf die Spalte Kurs_ID der Tabelle SchuelerAbiFaecher",
"""
UPDATE SchuelerAbiFaecher
SET Kurs_ID = NULL
WHERE Kurs_ID NOT IN (
SELECT ID
FROM Kurse
)
""",
Schema.tab_SchuelerAbiFaecher, Schema.tab_Kurse
);
add("Korrektur für den Fremdschluessel auf die Spalte Lehrer_ID der Tabelle SchuelerEinzelleistungen",
"""
UPDATE SchuelerEinzelleistungen
SET Lehrer_ID = NULL WHERE
Lehrer_ID NOT IN (
SELECT ID
FROM K_Lehrer
)
""",
Schema.tab_SchuelerEinzelleistungen, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte ErzieherArt_ID der Tabelle SchuelerErzAdr",
"""
UPDATE SchuelerErzAdr
SET ErzieherArt_ID = NULL
WHERE ErzieherArt_ID NOT IN (
SELECT ID
FROM K_ErzieherArt
)
""",
Schema.tab_SchuelerErzAdr, Schema.tab_K_ErzieherArt
);
add("Korrektur für den Fremdschluessel auf die Spalte ErzOrtsteil_ID der Tabelle SchuelerErzAdr",
"""
UPDATE SchuelerErzAdr
SET ErzOrtsteil_ID = NULL
WHERE ErzOrtsteil_ID NOT IN (
SELECT ID
FROM K_Ortsteil
)
""",
Schema.tab_SchuelerErzAdr, Schema.tab_K_Ortsteil
);
add("Korrektur für den Fremdschluessel auf die Spalte Erz1StaatKrz der Tabelle SchuelerErzAdr",
"""
UPDATE SchuelerErzAdr
SET Erz1StaatKrz = NULL
WHERE Erz1StaatKrz NOT IN (
SELECT DEStatisCode
FROM Nationalitaeten_Keys
)
""",
Schema.tab_SchuelerErzAdr, Schema.tab_Nationalitaeten_Keys
);
add("Korrektur für den Fremdschluessel auf die Spalte Erz2StaatKrz der Tabelle SchuelerErzAdr",
"""
UPDATE SchuelerErzAdr
SET Erz2StaatKrz = NULL
WHERE Erz2StaatKrz NOT IN (
SELECT DEStatisCode
FROM Nationalitaeten_Keys
)
""",
Schema.tab_SchuelerErzAdr, Schema.tab_Nationalitaeten_Keys
);
add("Korrektur für den Fremdschluessel auf die Spalte Fach_ID der Tabelle SchuelerFehlstunden",
"""
UPDATE SchuelerFehlstunden
SET Fach_ID = null
WHERE Fach_ID NOT IN (
SELECT ID
FROM EigeneSchule_Faecher
)
""",
Schema.tab_SchuelerFehlstunden, Schema.tab_EigeneSchule_Faecher
);
add("Korrektur für den Fremdschluessel auf die Spalte Lehrer_ID der Tabelle SchuelerFehlstunden",
"""
UPDATE SchuelerFehlstunden
SET Lehrer_ID = NULL
WHERE Lehrer_ID NOT IN (
SELECT ID
FROM K_Lehrer
)
""",
Schema.tab_SchuelerFehlstunden, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte Lehrer_ID der Tabelle SchuelerFoerderempfehlungen",
"""
UPDATE SchuelerFoerderempfehlungen
SET Lehrer_ID = NULL
WHERE Lehrer_ID NOT IN (
SELECT ID
FROM K_Lehrer
)
""",
Schema.tab_SchuelerFoerderempfehlungen, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte KategorieID der Tabelle SchuelerKAoADaten",
"""
UPDATE SchuelerKAoADaten
SET KategorieID = NULL
WHERE KategorieID NOT IN (
SELECT ID
FROM KAoA_Kategorie_Keys
)
""",
Schema.tab_SchuelerKAoADaten, Schema.tab_KAoA_Kategorie_Keys
);
add("Korrektur für den Fremdschluessel auf die Spalte MerkmalID der Tabelle SchuelerKAoADaten",
"""
UPDATE SchuelerKAoADaten
SET MerkmalID = NULL
WHERE MerkmalID NOT IN (
SELECT ID
FROM KAoA_Merkmal_Keys
)
""",
Schema.tab_SchuelerKAoADaten, Schema.tab_KAoA_Merkmal_Keys
);
add("Korrektur für den Fremdschluessel auf die Spalte ZusatzmerkmalID der Tabelle SchuelerKAoADaten",
"""
UPDATE SchuelerKAoADaten
SET ZusatzmerkmalID = NULL
WHERE ZusatzmerkmalID NOT IN (
SELECT ID
FROM KAoA_Zusatzmerkmal_Keys
)
""",
Schema.tab_SchuelerKAoADaten, Schema.tab_KAoA_Zusatzmerkmal_Keys
);
add("Korrektur für den Fremdschluessel auf die Spalte AnschlussoptionID der Tabelle SchuelerKAoADaten",
"""
UPDATE SchuelerKAoADaten
SET AnschlussoptionID = NULL
WHERE AnschlussoptionID NOT IN (
SELECT ID
FROM KAoA_Anschlussoption_Keys
)
""",
Schema.tab_SchuelerKAoADaten, Schema.tab_KAoA_Anschlussoption_Keys
);
add("Korrektur für den Fremdschluessel auf die Spalte BerufsfeldID der Tabelle SchuelerKAoADaten",
"""
UPDATE SchuelerKAoADaten
SET BerufsfeldID = NULL
WHERE BerufsfeldID NOT IN (
SELECT ID
FROM KAoA_Berufsfeld_Keys
)
""",
Schema.tab_SchuelerKAoADaten, Schema.tab_KAoA_Berufsfeld_Keys
);
add("Korrektur für den Fremdschluessel auf die Spalte SBO_Ebene4ID der Tabelle SchuelerKAoADaten",
"""
UPDATE SchuelerKAoADaten
SET SBO_Ebene4ID = NULL
WHERE SBO_Ebene4ID NOT IN (
SELECT ID
FROM KAoA_SBO_Ebene4_Keys
)
""",
Schema.tab_SchuelerKAoADaten, Schema.tab_KAoA_SBO_Ebene4_Keys
);
add("Korrektur für den Fremdschluessel auf die Spalte Fachlehrer der Tabelle SchuelerLeistungsdaten",
"""
UPDATE SchuelerLeistungsdaten
SET Fachlehrer = NULL
WHERE Fachlehrer NOT IN (
SELECT Kuerzel
FROM K_Lehrer
)
""",
Schema.tab_SchuelerLeistungsdaten, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte Zusatzkraft der Tabelle SchuelerLeistungsdaten",
"""
UPDATE SchuelerLeistungsdaten
SET Zusatzkraft = NULL
WHERE Zusatzkraft NOT IN (
SELECT Kuerzel
FROM K_Lehrer
)
""",
Schema.tab_SchuelerLeistungsdaten, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte Kurs_ID der Tabelle SchuelerLeistungsdaten",
"""
UPDATE SchuelerLeistungsdaten
SET Kurs_ID = NULL
WHERE Kurs_ID NOT IN (
SELECT ID
FROM Kurse
)
""",
Schema.tab_SchuelerLeistungsdaten, Schema.tab_Kurse
);
add("Setzen des ASDJahrgang, falls diese NULL ist auf den Eintrag des Jahrgangs bei Jahrgang_ID in der Tabelle Lernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten JOIN EigeneSchule_Jahrgaenge
ON SchuelerLernabschnittsdaten.Jahrgang_ID = EigeneSchule_Jahrgaenge.ID
SET SchuelerLernabschnittsdaten.ASDJahrgang = EigeneSchule_Jahrgaenge.ASDJahrgang
WHERE SchuelerLernabschnittsdaten.ASDJahrgang IS NULL AND SchuelerLernabschnittsdaten.Jahrgang_ID IS NOT NULL;
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule_Jahrgaenge
);
add("Korrektur für den Fremdschluessel auf die Spalte NPV_Fach_ID der Tabelle Lernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET NPV_Fach_ID = null
WHERE NPV_Fach_ID NOT IN (
SELECT ID
FROM EigeneSchule_Faecher
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule_Faecher
);
add("Korrektur für den Fremdschluessel auf die Spalte NPAA_Fach_ID der Tabelle Lernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET NPAA_Fach_ID = null
WHERE NPAA_Fach_ID NOT IN (
SELECT ID
FROM EigeneSchule_Faecher
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule_Faecher
);
add("Korrektur für den Fremdschluessel auf die Spalte NPBQ_Fach_ID der Tabelle Lernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET NPBQ_Fach_ID = null
WHERE NPBQ_Fach_ID NOT IN (
SELECT ID
FROM EigeneSchule_Faecher
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule_Faecher
);
add("Korrektur für den Fremdschluessel auf die Spalte Fachklasse_ID der Tabelle Lernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET Fachklasse_ID = NULL
WHERE Fachklasse_ID NOT IN (
SELECT ID
FROM EigeneSchule_Fachklassen
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule_Fachklassen
);
add("Korrektur für den Fremdschluessel auf die Spalte Foerderschwerpunkt_ID der Tabelle Lernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET Foerderschwerpunkt_ID = NULL
WHERE Foerderschwerpunkt_ID NOT IN (
SELECT ID
FROM K_Foerderschwerpunkt
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_K_Foerderschwerpunkt
);
add("Korrektur für den Fremdschluessel auf die Spalte Foerderschwerpunkt2_ID der Tabelle Lernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET Foerderschwerpunkt2_ID = NULL
WHERE Foerderschwerpunkt2_ID NOT IN (
SELECT ID
FROM K_Foerderschwerpunkt
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_K_Foerderschwerpunkt
);
add("Korrektur für den Fremdschluessel auf die Spalte Jahrgang_ID der Tabelle Lernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET Jahrgang_ID = NULL
WHERE Jahrgang_ID NOT IN (
SELECT ID
FROM EigeneSchule_Jahrgaenge
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule_Jahrgaenge
);
add("Korrektur für den Fremdschluessel auf die Spalte KlassenLehrer der Tabelle SchuelerLernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET KlassenLehrer = NULL
WHERE KlassenLehrer NOT IN (
SELECT Kuerzel
FROM K_Lehrer
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte StvKlassenlehrer_ID der Tabelle SchuelerLernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET StvKlassenlehrer_ID = NULL
WHERE StvKlassenlehrer_ID NOT IN (
SELECT ID
FROM K_Lehrer
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte Schwerpunkt_ID der Tabelle SchuelerLernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET Schwerpunkt_ID = NULL
WHERE Schwerpunkt_ID NOT IN (
SELECT ID
FROM K_Schwerpunkt
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_K_Schwerpunkt
);
add("Korrektur für den Fremdschluessel auf die Spalte Sonderpaedagoge_ID der Tabelle SchuelerLernabschnittsdaten",
"""
UPDATE SchuelerLernabschnittsdaten
SET Sonderpaedagoge_ID = NULL
WHERE Sonderpaedagoge_ID NOT IN (
SELECT ID
FROM K_Lehrer
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte TelefonArt_ID der Tabelle SchuelerTelefone",
"""
UPDATE SchuelerTelefone
SET TelefonArt_ID = NULL
WHERE TelefonArt_ID NOT IN (
SELECT ID
FROM K_TelefonArt
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_K_TelefonArt
);
add("Korrektur für den Fremdschluessel auf die Spalte Fachklasse_ID der Tabelle Versetzung",
"""
UPDATE Versetzung
SET Fachklasse_ID = NULL
WHERE Fachklasse_ID NOT IN (
SELECT ID
FROM EigeneSchule_Fachklassen
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule_Fachklassen
);
add("Korrektur für den Fremdschluessel auf die Spalte Jahrgang_ID der Tabelle Versetzung",
"""
UPDATE Versetzung
SET Jahrgang_ID = NULL
WHERE Jahrgang_ID NOT IN (
SELECT ID
FROM EigeneSchule_Jahrgaenge
)
""",
Schema.tab_Versetzung, Schema.tab_EigeneSchule_Jahrgaenge
);
add("Korrektur für den Fremdschluessel auf die Spalte KlassenlehrerKrz der Tabelle Versetzung",
"""
UPDATE Versetzung
SET KlassenlehrerKrz = NULL
WHERE KlassenlehrerKrz NOT IN (
SELECT Kuerzel
FROM K_Lehrer
)
""",
Schema.tab_Versetzung, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte StvKlassenlehrerKrz der Tabelle Versetzung",
"""
UPDATE Versetzung
SET StvKlassenlehrerKrz = NULL
WHERE StvKlassenlehrerKrz NOT IN (
SELECT Kuerzel
FROM K_Lehrer
)
""",
Schema.tab_Versetzung, Schema.tab_K_Lehrer
);
add("Korrektur für den Fremdschluessel auf die Spalte Fachklasse_ID der ZuordnungReportvorlagen",
"""
UPDATE ZuordnungReportvorlagen
SET Fachklasse_ID = NULL
WHERE Fachklasse_ID NOT IN (
SELECT ID
FROM EigeneSchule_Fachklassen
)
""",
Schema.tab_ZuordnungReportvorlagen, Schema.tab_EigeneSchule_Fachklassen
);
add("Korrektur für den Fremdschluessel auf die Spalte Jahrgang_ID der ZuordnungReportvorlagen",
"""
UPDATE ZuordnungReportvorlagen
SET Jahrgang_ID = NULL
WHERE Jahrgang_ID NOT IN (
SELECT ID
FROM EigeneSchule_Jahrgaenge
)
""",
Schema.tab_ZuordnungReportvorlagen, Schema.tab_EigeneSchule_Jahrgaenge
);
}
private void pruefeLeistungsdatenUndFachbemerkungen() {
add("Korrigiere case bei Pseudonoten",
"""
UPDATE SchuelerLeistungsdaten
SET NotenKrz = upper(NotenKrz)
""",
Schema.tab_SchuelerLeistungsdaten
);
add("Fehlerbehebung bei einer fehlenden Kursart, Kursart raten und setzen auf PUK, falls die Kurs_ID nicht gesetzt ist",
"""
UPDATE SchuelerLeistungsdaten
SET
Kursart = 'PUK',
KursartAllg = 'PUK'
WHERE ((Kursart IS NULL) OR (Kursart = ''))
AND (Kurs_ID IS NULL)
""",
Schema.tab_SchuelerLeistungsdaten
);
add("Fehlerbehebung bei einer fehlenden Kursart, Kursart raten und setzen auf PUT, falls die Kurs_ID gesetzt ist",
"""
UPDATE SchuelerLeistungsdaten
SET
Kursart = 'PUT',
KursartAllg = 'PUT'
WHERE ((Kursart IS NULL) OR (Kursart = ''))
AND (Kurs_ID IS NOT NULL)
""",
Schema.tab_SchuelerLeistungsdaten
);
add("Kopieren der Daten im Feld LELS in das Feld AUE, falls die Schulform keine Grundschule ist",
"""
UPDATE SchuelerLD_PSFachBem
SET AUE = LELS
WHERE ((
SELECT count(*)
FROM EigeneSchule
WHERE SchulformKrz = 'G'
) = 0)
AND LELS IS NOT NULL
""",
Schema.tab_SchuelerLD_PSFachBem, Schema.tab_EigeneSchule
);
add("Löschen der Daten im Feld LELS, falls die Schulform keine Grundschule ist",
"""
UPDATE SchuelerLD_PSFachBem
SET LELS = NULL
WHERE ((
SELECT count(*)
FROM EigeneSchule
WHERE SchulformKrz = 'G'
) = 0)
AND LELS IS NOT NULL
""",
Schema.tab_SchuelerLD_PSFachBem, Schema.tab_EigeneSchule
);
}
private void passeSprachenfolgeAn() {
add("Eintragung des atomaren Sprachenkürzels und der vorhandenen Jahrgänge in die ASD-Jahrgänge",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN EigeneSchule_Faecher esf ON ssf.Fach_ID = esf.ID
INNER JOIN FachKatalog sszf ON esf.StatistikKrz = sszf.KuerzelASD
SET
ssf.Sprache = sszf.Kuerzel,
ssf.ASDJahrgangVon = CASE
WHEN ((ssf.JahrgangVon IS NOT NULL)
AND (
(
FIND_IN_SET(
RIGHT(CONCAT('00', CONVERT(ssf.JahrgangVon, CHAR)), 2),
(SELECT GROUP_CONCAT(Kuerzel) FROM Jahrgaenge_Keys)
) > 0
) OR (
FIND_IN_SET(
RIGHT(CONCAT('00', CONVERT(ssf.JahrgangVon, CHAR)), 2),
(SELECT DISTINCT GROUP_CONCAT(ASDJahrgang) FROM SchuelerLernabschnittsdaten WHERE ASDJahrgang IS NOT NULL)
) > 0
)
)
) THEN
RIGHT(CONCAT('00', CONVERT(ssf.JahrgangVon, CHAR)), 2)
WHEN ((ssf.JahrgangVon IS NULL) AND (sszf.JahrgangAb IS NOT NULL))
THEN
sszf.JahrgangAb
ELSE
NULL
END,
ssf.ASDJahrgangBis = CASE
WHEN ((ssf.JahrgangBis IS NOT NULL)
AND (
(
FIND_IN_SET(
RIGHT(CONCAT('00', CONVERT(ssf.JahrgangBis, CHAR)), 2),
(SELECT GROUP_CONCAT(Kuerzel) FROM Jahrgaenge_Keys)
) > 0
) OR (
FIND_IN_SET(
RIGHT(CONCAT('00', CONVERT(ssf.JahrgangBis, CHAR)), 2),
(SELECT DISTINCT GROUP_CONCAT(ASDJahrgang) FROM SchuelerLernabschnittsdaten WHERE ASDJahrgang IS NOT NULL)
) > 0
)
)
) THEN
RIGHT(CONCAT('00', CONVERT(ssf.JahrgangBis, CHAR)), 2)
ELSE
NULL
END
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_SchuelerLernabschnittsdaten,
Schema.tab_EigeneSchule_Faecher, Schema.tab_FachKatalog, Schema.tab_Jahrgaenge_Keys
);
add("Das Feld Reihenfolge in ReihenfolgeNr übertragen. Nicht nummerische Werte (N, P, x) werden zu NULL",
"""
UPDATE SchuelerSprachenfolge
SET ReihenfolgeNr = CAST(Reihenfolge AS UNSIGNED)
WHERE Reihenfolge REGEXP '^[1-9]$'
""",
Schema.tab_SchuelerSprachenfolge
);
add("Anpassung ASDJahrgänge auf alpha-nummerische Werte: Ein Sprachbeginn unter APO-GOSt(B)10/G8 in 10/11 wird zu EF",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN Schueler s ON ssf.Schueler_ID = s.ID
INNER JOIN SchuelerLernabschnittsdaten sla ON s.ID = sla.Schueler_ID
SET ssf.ASDJahrgangVon = 'EF'
WHERE sla.PruefOrdnung = 'APO-GOSt(B)10/G8'
AND ((
ssf.ASDJahrgangVon = '10' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'GY'
) OR (
ssf.ASDJahrgangVon = '11' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) <> 'GY'
))
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_Schueler, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge auf alpha-nummerische Werte: Ein Sprachbeginn unter APO-GOSt(B)10/G8 in 10/11 wird zu EF. Ein späterer Sprachbeginn zu NULL, da unzulässig",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN Schueler s ON ssf.Schueler_ID = s.ID
INNER JOIN SchuelerLernabschnittsdaten sla ON s.ID = sla.Schueler_ID
SET ssf.ASDJahrgangVon = null
WHERE sla.PruefOrdnung = 'APO-GOSt(B)10/G8'
AND ((
ssf.ASDJahrgangVon > '10' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'GY'
) OR (
ssf.ASDJahrgangVon > '11' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) <> 'GY'
))
AND ASDJahrgangVon <> 'EF'
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_Schueler, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge auf alpha-nummerische Werte: Bei Sprachbeginn in EF unter APO-GOSt(B)10/G8 ist ein Sprachende in 10/11 die EF",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN Schueler s ON ssf.Schueler_ID = s.ID
INNER JOIN SchuelerLernabschnittsdaten sla ON s.ID = sla.Schueler_ID
SET ssf.ASDJahrgangBis = 'EF'
WHERE sla.PruefOrdnung = 'APO-GOSt(B)10/G8'
AND ((
ssf.ASDJahrgangBis = '10' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'GY'
) OR (
ssf.ASDJahrgangBis = '11' AND (select SchulformKrz FROM EigeneSchule LIMIT 1) <> 'GY'
))
AND ASDJahrgangVon = 'EF'
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_Schueler, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge auf alpha-nummerische Werte: Ein Sprachende unter APO-GOSt(B)10/G8 in 10 am GY kann eine abgeschlossene Sprache der Sek-I sein (z. B. bei Wechsel von R, GE zum GY). Prüfe daher, ob Sprache in Leistungsdaten der EF.1 vorhanden",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN Schueler s ON ssf.Schueler_ID = s.ID
INNER JOIN SchuelerLernabschnittsdaten sla ON s.id = sla.Schueler_ID
INNER JOIN SchuelerLeistungsdaten sld ON sla.ID = sld.Abschnitt_ID
INNER JOIN EigeneSchule_Faecher esf ON sld.Fach_ID = esf.ID
INNER JOIN FachKatalog sszf ON (sszf.KuerzelASD = esf.StatistikKrz AND ssf.Sprache = sszf.Kuerzel)
SET ssf.ASDJahrgangBis = 'EF'
WHERE sla.PruefOrdnung = 'APO-GOSt(B)10/G8'
AND sla.ASDJahrgang = 'EF'
AND sla.Abschnitt = 1
AND (ssf.ASDJahrgangBis = '10' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'GY')
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_Schueler, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule,
Schema.tab_SchuelerLeistungsdaten, Schema.tab_EigeneSchule_Faecher, Schema.tab_FachKatalog
);
add("Anpassung ASDJahrgänge auf alpha-nummerische Werte: Ein Sprachende unter APO-GOSt(B)10/G8 in 11/12 wird zu Q1",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN Schueler s ON ssf.Schueler_ID = s.ID
INNER JOIN SchuelerLernabschnittsdaten sla ON s.ID = sla.Schueler_ID
SET ssf.ASDJahrgangBis = 'Q1'
WHERE sla.PruefOrdnung = 'APO-GOSt(B)10/G8'
AND ((
ssf.ASDJahrgangBis = '11' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'GY'
) OR (
ssf.ASDJahrgangBis = '12' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) <> 'GY'
))
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_Schueler, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge auf alpha-nummerische Werte: Ein Sprachende unter APO-GOSt(B)10/G8 in 12/13 wird zu Q2",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN Schueler s ON ssf.Schueler_ID = s.ID
INNER JOIN SchuelerLernabschnittsdaten sla ON s.ID = sla.Schueler_ID
SET ssf.ASDJahrgangBis = 'Q2'
WHERE sla.PruefOrdnung = 'APO-GOSt(B)10/G8'
AND ((
ssf.ASDJahrgangBis = '12' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'GY'
) OR (
ssf.ASDJahrgangBis = '13' AND (SELECT SchulformKrz FROM EigeneSchule LIMIT 1) <> 'GY'
))
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_Schueler, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge Sprachbeginn am BK 11-12-13 > EF-Q1-Q2 (1)",
"""
UPDATE SchuelerSprachenfolge ssf
SET ssf.ASDJahrgangVon = 'EF'
WHERE (
ssf.JahrgangVon = '11' AND (((SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'BK'
) OR (
(SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'SB'))
)
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge Sprachbeginn am BK 11-12-13 > EF-Q1-Q2 (2)",
"""
UPDATE SchuelerSprachenfolge ssf
SET ssf.ASDJahrgangVon = 'Q1'
WHERE (
ssf.JahrgangVon = '12' AND (((SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'BK'
) OR (
(SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'SB'))
)
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge Sprachbeginn am BK 11-12-13 > EF-Q1-Q2 (3)",
"""
UPDATE SchuelerSprachenfolge ssf
SET ssf.ASDJahrgangVon = '03'
WHERE (
ssf.JahrgangVon = 'Q2' AND (((SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'BK'
) OR (
(SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'SB'))
)
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge Sprachende am BK 11-12-13 > EF-Q1-Q2 (1)",
"""
UPDATE SchuelerSprachenfolge ssf
SET ssf.ASDJahrgangBis = 'EF'
WHERE (
ssf.JahrgangBis = '11' AND (((SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'BK'
) OR (
(SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'SB'))
)
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge Sprachende am BK 11-12-13 > EF-Q1-Q2 (2)",
"""
UPDATE SchuelerSprachenfolge ssf
SET ssf.ASDJahrgangBis = 'Q1'
WHERE (
ssf.JahrgangBis = '12' AND (((SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'BK'
) OR (
(SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'SB'))
)
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge Sprachende am BK 11-12-13 > EF-Q1-Q2 (3)",
"""
UPDATE SchuelerSprachenfolge ssf
SET ssf.ASDJahrgangBis = 'Q2'
WHERE (
ssf.JahrgangBis = '13' AND (((SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'BK'
) OR (
(SELECT SchulformKrz FROM EigeneSchule LIMIT 1) = 'SB'))
)
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge Sprachbeginn auf 05, wenn der ASDJahrgang 01, 02, 03 oder 04 ist und das Sprachende nicht in diesem Bereich liegt.",
"""
UPDATE SchuelerSprachenfolge ssf JOIN EigeneSchule es
SET ssf.ASDJahrgangVon = '05' WHERE ssf.ASDJahrgangVon IN ('01', '02', '03', '04') AND (ssf.ASDJahrgangBis NOT IN ('01', '02', '03', '04') OR ssf.ASDJahrgangBis IS NULL) AND es.SchulformKrz <> 'WB';
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge Sprachbeginn auf null, wenn der ASDJahrgang 01, 02, 03 oder 04 ist und das Sprachende auch in diesem Bereich liegt.",
"""
UPDATE SchuelerSprachenfolge ssf JOIN EigeneSchule es
SET ssf.ASDJahrgangVon = null WHERE ssf.ASDJahrgangVon IN ('01', '02', '03', '04') AND ssf.ASDJahrgangBis IN ('01', '02', '03', '04') AND es.SchulformKrz <> 'WB';
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_EigeneSchule
);
add("Anpassung ASDJahrgänge Sprachende auf null, wenn der ASDJahrgang 01, 02, 03 oder 04 ist.",
"""
UPDATE SchuelerSprachenfolge ssf JOIN EigeneSchule es
SET ssf.ASDJahrgangBis = null WHERE ssf.ASDJahrgangBis IN ('01', '02', '03', '04') AND es.SchulformKrz <> 'WB';
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_EigeneSchule
);
add("Sprachprüfungen und -nachweis in eine separate Tabelle SchuelerSprachpruefungen auslagern",
"""
INSERT INTO SchuelerSprachpruefungen (Schueler_ID, Sprache, ASDJahrgang, IstHSUPruefung, IstFeststellungspruefung, Referenzniveau)
SELECT
s.ID,
ssf.Sprache,
COALESCE(COALESCE(ASDJahrgangBis, ASDJahrgangVon),
COALESCE(ASDJahrgangVon, ASDJahrgangBis)),
CASE WHEN ssf.Reihenfolge = 'P' THEN 1 ELSE 0 END,
CASE WHEN ssf.Reihenfolge = 'N' THEN 1 ELSE 0 END,
ssf.Referenzniveau
FROM Schueler s
INNER JOIN SchuelerSprachenfolge ssf ON ssf.Schueler_ID = s.ID
WHERE ssf.Reihenfolge = 'P' OR ssf.Reihenfolge = 'N'
""",
Schema.tab_SchuelerSprachpruefungen, Schema.tab_SchuelerSprachenfolge, Schema.tab_Schueler
);
add("Sprachprüfungen und -nachweis nach dem Auslagern in der alten Sprachenfolgetabelle löschen",
"""
DELETE FROM SchuelerSprachenfolge
WHERE Reihenfolge = 'P' OR Reihenfolge = 'N'
""",
Schema.tab_SchuelerSprachenfolge
);
add("Ergänze das Fach Latein in der Sprachenfolge, wenn Latinum vorhanden, aber kein Latein",
"""
INSERT INTO SchuelerSprachenfolge (Schueler_ID, Sprache)
(
SELECT sabi.Schueler_ID, 'L'
FROM SchuelerAbitur sabi
WHERE (sabi.Latinum = '+' OR sabi.KlLatinum = '+')
AND NOT EXISTS
(
SELECT ssf.Schueler_ID
FROM SchuelerSprachenfolge ssf
WHERE ssf.Sprache = 'L' AND sabi.Schueler_ID = ssf.Schueler_ID
)
)
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_SchuelerAbitur
);
add("Ergänze das Fach Griechisch in der Sprachenfolge, wenn Graecum vorhanden, aber kein Griechisch",
"""
INSERT INTO SchuelerSprachenfolge (Schueler_ID, Sprache)
(
SELECT sabi.Schueler_ID, 'G'
FROM SchuelerAbitur sabi
WHERE (sabi.Graecum = '+')
AND NOT EXISTS
(
SELECT ssf.Schueler_ID
FROM SchuelerSprachenfolge ssf
WHERE ssf.Sprache = 'G' AND sabi.Schueler_ID = ssf.Schueler_ID
)
)
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_SchuelerAbitur
);
add("Ergänze das Fach Hebräisch in der Sprachenfolge, wenn Hebraicum vorhanden, aber kein Hebräisch",
"""
INSERT INTO SchuelerSprachenfolge (Schueler_ID, Sprache)
(
SELECT sabi.Schueler_ID, 'H'
FROM SchuelerAbitur sabi
WHERE (sabi.Hebraicum = '+')
AND NOT EXISTS
(
SELECT ssf.Schueler_ID
FROM SchuelerSprachenfolge ssf
WHERE ssf.Sprache = 'H' AND sabi.Schueler_ID = ssf.Schueler_ID
)
)
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_SchuelerAbitur
);
add("Übertrage die Angaben (kleines) Latinum von der Abitur in die Sprachenfolge-Tabelle",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN SchuelerAbitur sabi ON ssf.Schueler_ID = sabi.Schueler_ID
SET
ssf.KleinesLatinumErreicht = CASE WHEN sabi.KlLatinum = '+' THEN 1 ELSE 0 END,
ssf.LatinumErreicht = CASE WHEN sabi.Latinum = '+' THEN 1 ELSE 0 END
WHERE ssf.Sprache = 'L'
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_SchuelerAbitur
);
add("Übertrage die Angabe Graecum von der Abitur in die Sprachenfolge-Tabelle",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN SchuelerAbitur sabi ON ssf.Schueler_ID = sabi.Schueler_ID
SET
ssf.GraecumErreicht = CASE WHEN sabi.Graecum = '+' THEN 1 ELSE 0 END
WHERE
ssf.Sprache = 'G'
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_SchuelerAbitur
);
add("Übertrage die Angabe Hebraicum von der Abitur in die Sprachenfolge-Tabelle",
"""
UPDATE SchuelerSprachenfolge ssf
INNER JOIN SchuelerAbitur sabi ON ssf.Schueler_ID = sabi.Schueler_ID
SET
ssf.HebraicumErreicht = CASE WHEN sabi.Hebraicum = '+' THEN 1 ELSE 0 END
WHERE
ssf.Sprache = 'H'
""",
Schema.tab_SchuelerSprachenfolge, Schema.tab_SchuelerAbitur
);
}
private void pruefeLeistungsdatenUndLernabschnittsdaten() {
add("Entferne fehlerhafte doppelte Datensätze in Bezug auf die Unique-Constraint SchuelerLeistungsdaten_UC1 aus den Leistungsdaten (1)",
"""
CREATE TEMPORARY TABLE TMP_SchuelerLeistungsdaten_Duplikate_MaxID AS
SELECT max(ID) AS maxID, Abschnitt_ID, Fach_ID, Fachlehrer, Kurs_ID, Kursart
FROM SchuelerLeistungsdaten
GROUP BY Abschnitt_ID, Fach_ID, Fachlehrer, Kurs_ID, Kursart
HAVING count(*) > 1
""",
Schema.tab_SchuelerLeistungsdaten
);
add("Entferne fehlerhafte doppelte Datensätze in Bezug auf die Unique-Constraint SchuelerLeistungsdaten_UC1 aus den Leistungsdaten (2)",
"""
CREATE TEMPORARY TABLE TMP_SchuelerLeistungsdaten_Duplikate_DeleteIDs AS
SELECT a.ID
FROM SchuelerLeistungsdaten a
JOIN TMP_SchuelerLeistungsdaten_Duplikate_MaxID b
ON a.Abschnitt_ID = b.Abschnitt_ID
AND (a.Fach_ID = b.Fach_ID)
AND ((a.Fachlehrer = b.Fachlehrer) OR (a.Fachlehrer IS NULL AND b.Fachlehrer IS NULL))
AND ((a.Kurs_ID = b.Kurs_ID) OR (a.Kurs_ID IS NULL AND b.Kurs_ID IS NULL))
AND ((a.Kursart = b.Kursart) OR (a.Kursart IS NULL AND b.Kursart IS NULL))
AND a.ID <> b.maxID
""",
Schema.tab_SchuelerLeistungsdaten
);
add("Entferne fehlerhafte doppelte Datensätze in Bezug auf die Unique-Constraint SchuelerLeistungsdaten_UC1 aus den Leistungsdaten (3)",
"""
DELETE FROM SchuelerLeistungsdaten
WHERE ID IN (
SELECT ID
FROM TMP_SchuelerLeistungsdaten_Duplikate_DeleteIDs
)
""",
Schema.tab_SchuelerLeistungsdaten
);
add("Entferne fehlerhafte doppelte Datensätze in Bezug auf die Unique-Constraint SchuelerLeistungsdaten_UC1 aus den Leistungsdaten (4)",
"""
DROP TEMPORARY TABLE TMP_SchuelerLeistungsdaten_Duplikate_DeleteIDs
"""
);
add("Entferne fehlerhafte doppelte Datensätze in Bezug auf die Unique-Constraint SchuelerLeistungsdaten_UC1 aus den Leistungsdaten (5)",
"""
DROP TEMPORARY TABLE TMP_SchuelerLeistungsdaten_Duplikate_MaxID
"""
);
add("Überprüfung des Noten-Eintrages für NotenKrz;",
"""
UPDATE SchuelerLeistungsdaten
SET NotenKrz = ''
WHERE NotenKrz IS NOT NULL
AND NotenKrz NOT IN ('6','5-','5','5+','4-','4','4+','3-','3','3+','2-','2','2+','1-','1','1+','E1','E2','E3','AT','AM','NB','NT','NE','LM')
""",
Schema.tab_SchuelerLeistungsdaten
);
add("Überprüfung des Noten-Eintrages für die Gesamtnote GS oder AL",
"""
UPDATE SchuelerLernabschnittsdaten
SET Gesamtnote_GS = null
WHERE Gesamtnote_GS IS NOT NULL AND (Gesamtnote_GS < 1 OR Gesamtnote_GS > 6)
""",
Schema.tab_SchuelerLernabschnittsdaten
);
add("Überprüfung des Noten-Eintrages für die Gesamtnote NW",
"""
UPDATE SchuelerLernabschnittsdaten
SET Gesamtnote_NW = null
WHERE Gesamtnote_NW IS NOT NULL AND (Gesamtnote_NW < 1 OR Gesamtnote_NW > 6)
""",
Schema.tab_SchuelerLernabschnittsdaten
);
}
private void pruefeWeitereDaten() {
add("Kopiere den Eintrag zum Schulleiter und dessen Stellvertreter aus der Tabelle EigeneSchule",
"""
INSERT INTO Schulleitung (LeitungsfunktionID, Funktionstext, LehrerID)
SELECT 1, 'Schulleitung', ID
FROM K_Lehrer
WHERE (Nachname, Vorname) IN (SELECT Schulleitername, SchulleiterVorname FROM EigeneSchule)
UNION
SELECT 2, 'Stellvertretende Schulleitung', ID
FROM K_Lehrer
WHERE (Nachname, Vorname) IN (SELECT StvSchulleiterName, StvSchulleiterVorname FROM EigeneSchule)
""",
Schema.tab_Schulleitung, Schema.tab_K_Lehrer, Schema.tab_EigeneSchule
);
add("Überprüfung des Eintrages des Geschlechtes",
"""
UPDATE Schueler SET Geschlecht = 6 WHERE Geschlecht NOT IN (3,4,5,6)
""",
Schema.tab_Schueler
);
add("Überprüfung des Eintrages des Geschlechtes",
"""
UPDATE K_Lehrer SET Geschlecht = '6' WHERE Geschlecht NOT IN ('3','4','5','6')
""",
Schema.tab_K_Lehrer
);
add("Überprüfung des Personal-Typs (1)",
"""
UPDATE K_Lehrer SET PersonTyp = 'LEHRKRAFT' WHERE PersonTyp IS NULL
""",
Schema.tab_K_Lehrer
);
add("Überprüfung des Personal-Typs (2)",
"""
UPDATE K_Lehrer SET PersonTyp = 'SONSTIGE' WHERE PersonTyp NOT IN ('LEHRKRAFT','SEKRETARIAT','PERSONAL','EXTERN','SONSTIGE')
""",
Schema.tab_K_Lehrer
);
add("Überprüfung des Schüler-Status",
"""
UPDATE Schueler SET Status = 2 WHERE Status NOT IN (0,1,2,3,6,8,9,10)
""",
Schema.tab_Schueler
);
add("Überprüfung des Eintrages zur Fortschreibungsart",
"""
UPDATE Kurse SET Fortschreibungsart = 'K' WHERE Fortschreibungsart NOT IN ('N','D','B','K')
""",
Schema.tab_Kurse
);
final String alleSchulgliederungen = Arrays.stream(Schulgliederung.values())
.map(sgl -> Arrays.stream(sgl.historie).toList()).flatMap(List::stream)
.map(h -> h.kuerzel).distinct().collect(Collectors.joining("','", "('", "')"));
add("Überprüfung der Schulgliederung",
"UPDATE EigeneSchule_Jahrgaenge SET SGL = '***' WHERE SGL NOT IN " + alleSchulgliederungen,
Schema.tab_EigeneSchule_Jahrgaenge
);
add("Überprüfung der Schulgliederung",
"UPDATE Schueler SET ASDSchulform = '***' WHERE ASDSchulform NOT IN " + alleSchulgliederungen,
Schema.tab_Schueler
);
add("Anpassen des Fremdschlüssels für den Fremdschluessel von K_AllgAdresse auf die ID von K_AdressArt statt der Bezeichnung",
"""
UPDATE K_AllgAdresse
SET AdressArt_ID = (
SELECT K_Adressart.ID
FROM K_Adressart
WHERE K_Adressart.Bezeichnung = K_AllgAdresse.AllgAdrAdressArt LIMIT 1
)
""",
Schema.tab_K_AllgAdresse, Schema.tab_K_Adressart
);
add("Entferne Einzelleistung, wenn diese nicht auf einen Leistungsdatensatz verweist",
"""
DELETE FROM SchuelerEinzelleistungen
WHERE Leistung_ID NOT IN (
SELECT ID
FROM SchuelerLeistungsdaten
)
""",
Schema.tab_SchuelerEinzelleistungen, Schema.tab_SchuelerLeistungsdaten
);
add("Setze die Art der Einzelleistung auf NULL, wenn diese nicht auf einen Datensatz der Tabelle K_Einzelleistungen verweist",
"""
DELETE FROM SchuelerEinzelleistungen
WHERE Art_ID NOT IN (
SELECT ID
FROM K_Einzelleistungen
)
""",
Schema.tab_SchuelerEinzelleistungen, Schema.tab_K_Einzelleistungen
);
add("Setze den Lehrer, welcher der Einzelleistung zugeordnet ist auf NULL, wenn dieser nicht in der Tabelle K_Lehrer vorkommt",
"""
DELETE FROM SchuelerEinzelleistungen
WHERE Lehrer_ID NOT IN (
SELECT ID
FROM K_Lehrer
)
""",
Schema.tab_SchuelerEinzelleistungen, Schema.tab_K_Lehrer
);
add("Ändere den Eintrag WechselNr von 999 auf 0 für den aktuellen Abschnitt (ggf. nach dem letzten Wechsel)",
"""
UPDATE SchuelerLernabschnittsdaten
SET WechselNr = 0
WHERE WechselNr = 999
""",
Schema.tab_SchuelerLernabschnittsdaten
);
}
private void pruefeAbiturtabellen() {
add("Überprüfung des Noten-Eintrages P11_1",
"""
UPDATE SchuelerAbiFaecher
SET P11_1 = null
WHERE P11_1 IS NOT NULL
AND P11_1 NOT IN ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','AT','E1','E2','E3')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Noten-Eintrages P11_2",
"""
UPDATE SchuelerAbiFaecher
SET P11_2 = null
WHERE P11_2 IS NOT NULL
AND P11_2 NOT IN ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','AT','E1','E2','E3')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Noten-Eintrages P12_1",
"""
UPDATE SchuelerAbiFaecher
SET P12_1 = null
WHERE P12_1 IS NOT NULL
AND P12_1 NOT IN ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','AT','E1','E2','E3')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Noten-Eintrages P12_2",
"""
UPDATE SchuelerAbiFaecher
SET P12_2 = null
WHERE P12_2 IS NOT NULL
AND P12_2 NOT IN ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','AT','E1','E2','E3')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Noten-Eintrages P13_1",
"""
UPDATE SchuelerAbiFaecher
SET P13_1 = null
WHERE P13_1 IS NOT NULL
AND P13_1 NOT IN ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','AT','E1','E2','E3')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Noten-Eintrages P13_2",
"""
UPDATE SchuelerAbiFaecher
SET P13_2 = null
WHERE P13_2 IS NOT NULL
AND P13_2 NOT IN ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','AT','E1','E2','E3')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Noten-Eintrages P_FA",
"""
UPDATE SchuelerAbiFaecher
SET P_FA = null
WHERE P_FA IS NOT NULL
AND P_FA NOT IN ('00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Noten-Eintrages AbiPruefErgebnis",
"""
UPDATE SchuelerAbiFaecher
SET AbiPruefErgebnis = null
WHERE AbiPruefErgebnis IS NOT NULL
AND (AbiPruefErgebnis < 0 OR AbiPruefErgebnis > 15)
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Noten-Eintrages MdlPruefErgebnis",
"""
UPDATE SchuelerAbiFaecher
SET MdlPruefErgebnis = null
WHERE MdlPruefErgebnis IS NOT NULL
AND (MdlPruefErgebnis < 0 OR MdlPruefErgebnis > 15)
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Noten-Eintrages BLL_Punkte",
"""
UPDATE SchuelerAbitur
SET BLL_Punkte = null
WHERE BLL_Punkte IS NOT NULL
AND (BLL_Punkte < 0 OR BLL_Punkte > 15)
""",
Schema.tab_SchuelerAbitur
);
add("Tabelle SchuelerAbiFaecher - Q1.1: Umwandeln von L in S bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S12_1='S' WHERE S12_1='L'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q1.2: Umwandeln von L in S bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S12_2='S' WHERE S12_2='L'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q2.1: Umwandeln von L in S bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S13_1='S' WHERE S13_1='L'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q2.2: Umwandeln von L in S bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S13_2='S' WHERE S13_2='L'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q1.1: Umwandeln von V in M bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S12_1='M' WHERE S12_1='V'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q1.2: Umwandeln von V in M bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S12_2='M' WHERE S12_2='V'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q2.1: Umwandeln von V in M bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S13_1='M' WHERE S13_1='V'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q2.2: Umwandeln von V in M bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S13_2='M' WHERE S13_2='V'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q1.1: Umwandeln von Z in M bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S12_1='M' WHERE S12_1='Z'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q1.2: Umwandeln von Z in M bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S12_2='M' WHERE S12_2='Z'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q2.1: Umwandeln von Z in M bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S13_1='M' WHERE S13_1='Z'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Tabelle SchuelerAbiFaecher - Q2.2: Umwandeln von Z in M bei der Schriftlichkeit",
"""
UPDATE SchuelerAbiFaecher SET S13_2='M' WHERE S13_2='Z'
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Belegungsart S11_1",
"""
UPDATE SchuelerAbiFaecher SET S11_1 = '-' WHERE S11_1 IS NULL OR S11_1 NOT IN ('-','M','S')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Belegungsart S11_2",
"""
UPDATE SchuelerAbiFaecher SET S11_2 = '-' WHERE S11_2 IS NULL OR S11_2 NOT IN ('-','M','S')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Belegungsart S12_1",
"""
UPDATE SchuelerAbiFaecher SET S12_1 = '-' WHERE S12_1 IS NULL OR S12_1 NOT IN ('-','M','S')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Belegungsart S12_2",
"""
UPDATE SchuelerAbiFaecher SET S12_2 = '-' WHERE S12_2 IS NULL OR S12_2 NOT IN ('-','M','S')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Belegungsart S13_1",
"""
UPDATE SchuelerAbiFaecher SET S13_1 = '-' WHERE S13_1 IS NULL OR S13_1 NOT IN ('-','M','S')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Belegungsart S13_2",
"""
UPDATE SchuelerAbiFaecher SET S13_2 = '-' WHERE S13_2 IS NULL OR S13_2 NOT IN ('-','M','S')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Kurs-Markierung R12_1",
"""
UPDATE SchuelerAbiFaecher SET R12_1 = null WHERE R12_1 IS NOT NULL AND R12_1 NOT IN ('-','+','/')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Kurs-Markierung R12_2",
"""
UPDATE SchuelerAbiFaecher SET R12_2 = null WHERE R12_2 IS NOT NULL AND R12_2 NOT IN ('-','+','/')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Kurs-Markierung R13_1",
"""
UPDATE SchuelerAbiFaecher SET R13_1 = null WHERE R13_1 IS NOT NULL AND R13_1 NOT IN ('-','+','/')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Kurs-Markierung R13_2",
"""
UPDATE SchuelerAbiFaecher SET R13_2 = null WHERE R13_2 IS NOT NULL AND R13_2 NOT IN ('-','+','/')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung des Abiturfaches",
"""
UPDATE SchuelerAbiFaecher SET AbiFach = null WHERE AbiFach IS NOT NULL AND AbiFach NOT IN ('1','2','3','4')
""",
Schema.tab_SchuelerAbiFaecher
);
add("Überprüfung der Art von Besonderen Lernleistungen",
"""
UPDATE SchuelerAbitur SET BLL_Art = 'K' WHERE BLL_Art IS NOT NULL AND BLL_Art NOT IN ('K','P','E')
""",
Schema.tab_SchuelerAbitur
);
add("Überprüfung der allgemeinen Kurs-Art der Abiturfächer",
"""
UPDATE SchuelerAbiFaecher SET KursartAllg = null WHERE KursartAllg IS NOT NULL AND KursartAllg NOT IN ('LK','GK','ZK','PJK','VTF')
""",
Schema.tab_SchuelerAbiFaecher
);
}
private void erstelleNeueKlassenTabelle() {
add("Tabelle Klassen: Erstellung der aktuellen Einträge aus der Versetzungstabelle",
"""
INSERT INTO Klassen(ID, Schuljahresabschnitts_ID, Bezeichnung, ASDKlasse, Klasse, Jahrgang_ID, FKlasse, VKlasse, OrgFormKrz, ASDSchulformNr,
Fachklasse_ID, PruefOrdnung, Sichtbar, Sortierung, Klassenart, SommerSem, NotenGesperrt, AdrMerkmal, KoopKlasse, Ankreuzzeugnisse)
SELECT
Versetzung.ID,
EigeneSchule.Schuljahresabschnitts_ID,
Versetzung.Bezeichnung,
Versetzung.ASDKlasse,
Versetzung.Klasse,
Versetzung.Jahrgang_ID,
Versetzung.FKlasse,
Versetzung.VKlasse,
Versetzung.OrgFormKrz,
Versetzung.ASDSchulformNr,
Versetzung.Fachklasse_ID,
Versetzung.PruefOrdnung,
Versetzung.Sichtbar,
Versetzung.Sortierung,
Versetzung.Klassenart,
Versetzung.SommerSem,
Versetzung.NotenGesperrt,
Versetzung.AdrMerkmal,
Versetzung.KoopKlasse,
Versetzung.Ankreuzzeugnisse
FROM Versetzung JOIN EigeneSchule
""",
Schema.tab_Klassen, Schema.tab_Versetzung, Schema.tab_EigeneSchule
);
add("Tabelle KlassenLehrer: Erstellung der aktuellen Einträge aus der Versetzungstabelle",
"""
INSERT INTO KlassenLehrer(Klassen_ID, Lehrer_ID, Reihenfolge)
((
SELECT
Versetzung.ID AS Klassen_ID,
K_Lehrer.ID AS Lehrer_ID,
1 AS Reihenfolge
FROM
Versetzung JOIN K_Lehrer ON Versetzung.KlassenlehrerKrz = K_Lehrer.Kuerzel
WHERE
Versetzung.KlassenlehrerKrz IS NOT NULL
) UNION (
SELECT
Versetzung.ID AS Klassen_ID,
K_Lehrer.ID AS Lehrer_ID,
2 AS Reihenfolge
FROM
Versetzung JOIN K_Lehrer
ON Versetzung.StvKlassenlehrerKrz = K_Lehrer.Kuerzel
AND Versetzung.StvKlassenlehrerKrz <> Versetzung.KlassenlehrerKrz
WHERE
Versetzung.StvKlassenlehrerKrz IS NOT NULL
))
""",
Schema.tab_KlassenLehrer, Schema.tab_Versetzung, Schema.tab_K_Lehrer
);
add("Tabelle Klassen: Erstellung Einträge für die übrigen Schuljahresabschnitte basierend auf der Versetzungstabelle",
"""
INSERT INTO Klassen(Schuljahresabschnitts_ID, Bezeichnung, ASDKlasse, Klasse, Jahrgang_ID, FKlasse, VKlasse, OrgFormKrz, ASDSchulformNr,
Fachklasse_ID, PruefOrdnung, Sichtbar, Sortierung, Klassenart, SommerSem, NotenGesperrt, AdrMerkmal, KoopKlasse, Ankreuzzeugnisse)
SELECT
Schuljahresabschnitte.ID,
Versetzung.Bezeichnung,
Versetzung.ASDKlasse,
Versetzung.Klasse,
Versetzung.Jahrgang_ID,
Versetzung.FKlasse,
Versetzung.VKlasse,
Versetzung.OrgFormKrz,
Versetzung.ASDSchulformNr,
Versetzung.Fachklasse_ID,
Versetzung.PruefOrdnung,
Versetzung.Sichtbar,
Versetzung.Sortierung,
Versetzung.Klassenart,
Versetzung.SommerSem,
Versetzung.NotenGesperrt,
Versetzung.AdrMerkmal,
Versetzung.KoopKlasse,
Versetzung.Ankreuzzeugnisse
FROM
Versetzung, Schuljahresabschnitte
WHERE
Schuljahresabschnitte.ID NOT IN (
SELECT Schuljahresabschnitts_ID
FROM EigeneSchule
)
""",
Schema.tab_Klassen, Schema.tab_Versetzung, Schema.tab_Schuljahresabschnitte, Schema.tab_EigeneSchule
);
add("Tabelle KlassenLehrer: Erstellung Einträge für die übrigen Schuljahresabschnitte basierend auf den Schüler-Abschnittsdaten",
"""
INSERT INTO KlassenLehrer(Klassen_ID, Lehrer_ID, Reihenfolge)
SELECT
Klassen_ID,
Lehrer_ID,
ROW_NUMBER() OVER (PARTITION BY Klassen_ID ORDER BY sum(Anzahl) DESC, Lehrer_ID) AS Reihenfolge
FROM
((
SELECT
Klassen.ID AS Klassen_ID,
K_Lehrer.ID AS Lehrer_ID,
count(*)*2 AS Anzahl
FROM SchuelerLernabschnittsdaten
JOIN Klassen ON SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Klassen.Schuljahresabschnitts_ID
AND SchuelerLernabschnittsdaten.Klasse = Klassen.Klasse
JOIN K_Lehrer ON SchuelerLernabschnittsdaten.Klassenlehrer = K_Lehrer.Kuerzel
WHERE SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID NOT IN (
SELECT Schuljahresabschnitts_ID
FROM EigeneSchule
)
GROUP BY Klassen.ID, K_Lehrer.ID
) UNION (
SELECT
Klassen.ID AS Klassen_ID,
K_Lehrer.ID AS Lehrer_ID,
count(*) AS Anzahl
FROM SchuelerLernabschnittsdaten
JOIN Klassen ON SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Klassen.Schuljahresabschnitts_ID
AND SchuelerLernabschnittsdaten.Klasse = Klassen.Klasse
JOIN K_Lehrer ON SchuelerLernabschnittsdaten.StvKlassenlehrer_ID = K_Lehrer.ID
WHERE SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID NOT IN (
SELECT Schuljahresabschnitts_ID
FROM EigeneSchule
)
GROUP BY Klassen.ID, K_Lehrer.ID
)) a
GROUP BY Klassen_ID, Lehrer_ID
ORDER BY Klassen_ID, Anzahl DESC, Lehrer_ID
""",
Schema.tab_KlassenLehrer, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Klassen, Schema.tab_EigeneSchule, Schema.tab_K_Lehrer
);
add("Tabelle KlassenLehrer: Erstellung Einträge für die übrigen Schuljahresabschnitte basierend auf den Schüler-Abschnittsdaten",
"""
INSERT INTO KlassenLehrer(Klassen_ID, Lehrer_ID, Reihenfolge)
SELECT
Klassen_ID,
Lehrer_ID,
ROW_NUMBER() OVER (PARTITION BY Klassen_ID ORDER BY sum(Anzahl) DESC, Lehrer_ID) + 2 AS Reihenfolge
FROM
((
SELECT
Klassen.ID AS Klassen_ID,
K_Lehrer.ID AS Lehrer_ID,
count(*)*2 AS Anzahl
FROM SchuelerLernabschnittsdaten
JOIN Klassen ON SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Klassen.Schuljahresabschnitts_ID
AND SchuelerLernabschnittsdaten.Klasse = Klassen.Klasse
JOIN K_Lehrer ON SchuelerLernabschnittsdaten.Klassenlehrer = K_Lehrer.Kuerzel
WHERE SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID IN (
SELECT Schuljahresabschnitts_ID
FROM EigeneSchule
) AND (Klassen.ID, K_Lehrer.ID) NOT IN (SELECT Klassen_ID, Lehrer_ID FROM KlassenLehrer)
GROUP BY Klassen.ID, K_Lehrer.ID
) UNION (
SELECT
Klassen.ID AS Klassen_ID,
K_Lehrer.ID AS Lehrer_ID,
count(*) AS Anzahl
FROM SchuelerLernabschnittsdaten
JOIN Klassen ON SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Klassen.Schuljahresabschnitts_ID
AND SchuelerLernabschnittsdaten.Klasse = Klassen.Klasse
JOIN K_Lehrer ON SchuelerLernabschnittsdaten.StvKlassenlehrer_ID = K_Lehrer.ID
WHERE SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID IN (
SELECT Schuljahresabschnitts_ID
FROM EigeneSchule
) AND (Klassen.ID, K_Lehrer.ID) NOT IN (SELECT Klassen_ID, Lehrer_ID FROM KlassenLehrer)
GROUP BY Klassen.ID, K_Lehrer.ID
)) a
GROUP BY Klassen_ID, Lehrer_ID
ORDER BY Klassen_ID, Anzahl DESC, Lehrer_ID
""",
Schema.tab_KlassenLehrer, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Klassen, Schema.tab_EigeneSchule, Schema.tab_K_Lehrer
);
}
private void passeLehrerTabelleAn() {
add("Tabelle Kurse: Umstellen von Lehrer-Kürzel auf Lehrer-ID",
"""
UPDATE Kurse
JOIN K_Lehrer ON Kurse.LehrerKrz = K_Lehrer.Kuerzel
SET Kurse.Lehrer_ID = K_Lehrer.ID
""",
Schema.tab_Kurse, Schema.tab_K_Lehrer
);
add("Tabelle SchuelerAbiFaecher: Umstellen von Lehrer-Kürzel auf Lehrer-ID",
"""
UPDATE SchuelerAbiFaecher
JOIN K_Lehrer ON SchuelerAbiFaecher.Fachlehrer = K_Lehrer.Kuerzel
SET SchuelerAbiFaecher.Fachlehrer_ID = K_Lehrer.ID
""",
Schema.tab_SchuelerAbiFaecher, Schema.tab_K_Lehrer
);
add("Tabelle SchuelerBKFaecher: Umstellen von Lehrer-Kürzel auf Lehrer-ID",
"""
UPDATE SchuelerBKFaecher
JOIN K_Lehrer ON SchuelerBKFaecher.Fachlehrer = K_Lehrer.Kuerzel
SET SchuelerBKFaecher.Fachlehrer_ID = K_Lehrer.ID
""",
Schema.tab_SchuelerBKFaecher, Schema.tab_K_Lehrer
);
add("Tabelle SchuelerLeistungsdaten: Umstellen von Lehrer-Kürzel auf Lehrer-ID (1)",
"""
UPDATE SchuelerLeistungsdaten
JOIN K_Lehrer ON SchuelerLeistungsdaten.Fachlehrer = K_Lehrer.Kuerzel
SET SchuelerLeistungsdaten.Fachlehrer_ID = K_Lehrer.ID
""",
Schema.tab_SchuelerLeistungsdaten, Schema.tab_K_Lehrer
);
add("Tabelle SchuelerLeistungsdaten: Umstellen von Lehrer-Kürzel auf Lehrer-ID (2) - Zusatzkraft",
"""
UPDATE SchuelerLeistungsdaten
JOIN K_Lehrer ON SchuelerLeistungsdaten.Zusatzkraft = K_Lehrer.Kuerzel
SET SchuelerLeistungsdaten.Zusatzkraft_ID = K_Lehrer.ID
""",
Schema.tab_SchuelerLeistungsdaten, Schema.tab_K_Lehrer
);
add("Tabelle Stundentafel_Faecher: Umstellen von Lehrer-Kürzel auf Lehrer-ID",
"""
UPDATE Stundentafel_Faecher
JOIN K_Lehrer ON Stundentafel_Faecher.LehrerKrz = K_Lehrer.Kuerzel
SET Stundentafel_Faecher.Lehrer_ID = K_Lehrer.ID
""",
Schema.tab_Stundentafel_Faecher, Schema.tab_K_Lehrer
);
add("Tabelle EigeneSchule_Abteilungen: Umstellen von Lehrer-Kürzel auf Lehrer-ID",
"""
UPDATE EigeneSchule_Abteilungen
JOIN K_Lehrer ON EigeneSchule_Abteilungen.AbteilungsLeiter = K_Lehrer.Kuerzel
SET EigeneSchule_Abteilungen.AbteilungsLeiter_ID = K_Lehrer.ID
""",
Schema.tab_EigeneSchule_Abteilungen, Schema.tab_K_Lehrer
);
}
private void pruefeWeitereDaten2() {
add("ZP10: Kopiere Daten aus SchuelerBKFaecher nach SchuelerZP10",
"""
INSERT INTO SchuelerZP10(ID, Schueler_ID, Schuljahresabschnitts_ID, Fach_ID, Vornote, NoteSchriftlich,
MdlPruefung, MdlPruefungFW, NoteMuendlich, NoteAbschluss, Fachlehrer_ID)
SELECT
SchuelerBKFaecher.ID,
SchuelerBKFaecher.Schueler_ID,
SchuelerBKFaecher.Schuljahresabschnitts_ID,
SchuelerBKFaecher.Fach_ID,
SchuelerBKFaecher.Vornote,
SchuelerBKFaecher.NoteSchriftlich,
SchuelerBKFaecher.MdlPruefung,
SchuelerBKFaecher.MdlPruefungFW,
SchuelerBKFaecher.NoteMuendlich,
SchuelerBKFaecher.NoteAbschluss,
SchuelerBKFaecher.Fachlehrer_ID
FROM SchuelerBKFaecher
JOIN EigeneSchule ON EigeneSchule.SchulformKrz NOT IN ('BK','SB')
WHERE SchuelerBKFaecher.ID IN (SELECT max(ID) FROM SchuelerBKFaecher GROUP BY Schueler_ID, Schuljahresabschnitts_ID, Fach_ID)
""",
Schema.tab_SchuelerZP10, Schema.tab_SchuelerBKFaecher, Schema.tab_EigeneSchule
);
add("BKFaecher: Leere die Tabelle, falls die Schulform nicht BK oder SB ist",
"""
DELETE FROM SchuelerBKFaecher
WHERE (
SELECT ID
FROM EigeneSchule
WHERE EigeneSchule.SchulformKrz NOT IN ('BK','SB')
)
""",
Schema.tab_SchuelerBKFaecher, Schema.tab_EigeneSchule
);
add("BKAbschluss: Leere die Tabelle, falls die Schulform nicht BK oder SB ist",
"""
DELETE FROM SchuelerBKAbschluss
WHERE (
SELECT ID
FROM EigeneSchule
WHERE EigeneSchule.SchulformKrz NOT IN ('BK','SB')
)
""",
Schema.tab_SchuelerBKAbschluss, Schema.tab_EigeneSchule
);
add("Schüler-Klassen-Zuordnung: Entferne alle Einträge, die nicht in der neuen Klassentabelle vorhanden sind und wo daher keine Zuordnung machbar ist",
"""
UPDATE Schueler
SET Klasse = null
WHERE (Schuljahresabschnitts_ID, Klasse) NOT IN (
SELECT
Schuljahresabschnitts_ID,
Klasse
FROM
Klassen
)
""",
Schema.tab_Schueler, Schema.tab_Klassen
);
add("Schüler-Klassen-Zuordnung: Bestimme die Klassen-ID des Schülers und setze diese",
"""
UPDATE Schueler
JOIN Klassen ON (Schueler.Schuljahresabschnitts_ID = Klassen.Schuljahresabschnitts_ID)
AND (Schueler.Klasse = Klassen.Klasse)
SET
Schueler.Klassen_ID = Klassen.ID
""",
Schema.tab_Schueler, Schema.tab_Klassen
);
add("SchuelerFoerderempfehlungen-Klassen-Zuordnung: Entferne alle Einträge, die nicht in der neuen Klassentabelle vorhanden sind und wo daher keine Zuordnung machbar ist",
"""
UPDATE SchuelerFoerderempfehlungen
JOIN SchuelerLernabschnittsdaten ON SchuelerFoerderempfehlungen.Abschnitt_ID = SchuelerLernabschnittsdaten.ID
SET
SchuelerFoerderempfehlungen.Klasse = null
WHERE (SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID, SchuelerFoerderempfehlungen.Klasse) NOT IN (
SELECT
Schuljahresabschnitts_ID,
Klasse
FROM
Klassen
)
""",
Schema.tab_SchuelerFoerderempfehlungen, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Klassen
);
add("SchuelerFoerderempfehlungen-Klassen-Zuordnung: Bestimme die Klassen-ID der Schüler-Förderempfehlung und setze diese",
"""
UPDATE SchuelerFoerderempfehlungen
JOIN SchuelerLernabschnittsdaten ON SchuelerFoerderempfehlungen.Abschnitt_ID = SchuelerLernabschnittsdaten.ID
JOIN Klassen ON (SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Klassen.Schuljahresabschnitts_ID)
AND (SchuelerFoerderempfehlungen.Klasse = Klassen.Klasse)
SET
SchuelerFoerderempfehlungen.Klassen_ID = Klassen.ID
""",
Schema.tab_SchuelerFoerderempfehlungen, Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Klassen
);
add("Schüler-Lernabschnitt-Klassen-Zuordnung: Entferne alle Einträge, die nicht in der neuen Klassentabelle vorhanden sind und wo daher keine Zuordnung machbar ist",
"""
UPDATE SchuelerLernabschnittsdaten
SET Klasse = null
WHERE (Schuljahresabschnitts_ID, Klasse) NOT IN (
SELECT
Schuljahresabschnitts_ID,
Klasse
FROM
Klassen
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Klassen
);
add("Schüler-Lernabschnitt-Klassen-Zuordnung: Bestimme die Klassen-ID des Schüler-Lernabschnitts und setze diese",
"""
UPDATE SchuelerLernabschnittsdaten
JOIN Klassen ON (SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Klassen.Schuljahresabschnitts_ID)
AND (SchuelerLernabschnittsdaten.Klasse = Klassen.Klasse)
SET
SchuelerLernabschnittsdaten.Klassen_ID = Klassen.ID
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Klassen
);
add("Schuljahresabschnitte: Setzen der Abschnitts-ID des vorigen Abschnitts",
"""
UPDATE Schuljahresabschnitte s
JOIN Schuljahresabschnitte t
ON t.Jahr = CASE WHEN s.Abschnitt - 1 < 1 THEN s.Jahr - 1 ELSE s.Jahr END
AND t.Abschnitt = CASE WHEN s.Abschnitt - 1 < 1 THEN (SELECT AnzahlAbschnitte FROM EigeneSchule) ELSE s.Abschnitt - 1 END
SET s.VorigerAbschnitt_ID = t.ID
""",
Schema.tab_Schuljahresabschnitte
);
add("Schuljahresabschnitte: Setzen der Folge-Abschnitts-ID",
"""
UPDATE Schuljahresabschnitte s
JOIN Schuljahresabschnitte t
ON t.Jahr = CASE WHEN s.Abschnitt + 1 > (SELECT AnzahlAbschnitte FROM EigeneSchule) THEN s.Jahr + 1 ELSE s.Jahr END
AND t.Abschnitt = CASE WHEN s.Abschnitt + 1 > (SELECT AnzahlAbschnitte FROM EigeneSchule) THEN 1 ELSE s.Abschnitt + 1 END
SET s.FolgeAbschnitt_ID = t.ID
""",
Schema.tab_Schuljahresabschnitte
);
add("Schüler-Lernabschnitt-Folge-Klassen-Zuordnung: Entferne alle Einträge, die nicht in der neuen Klassentabelle vorhanden sind und wo daher keine Zuordnung machbar ist",
"""
UPDATE SchuelerLernabschnittsdaten
SET Folgeklasse = null
WHERE (Schuljahresabschnitts_ID, Folgeklasse) NOT IN (
SELECT
Schuljahresabschnitts_ID,
Klasse
FROM
Klassen
)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Klassen
);
add("Schüler-Lernabschnitt-Folge-Klassen-Zuordnung: Entferne alle Einträge, die dem Standardeintrag in der neuen Klassentabelle entsprechen",
"""
UPDATE SchuelerLernabschnittsdaten
JOIN Klassen ON (SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Klassen.Schuljahresabschnitts_ID)
AND (SchuelerLernabschnittsdaten.Klasse = Klassen.Klasse)
AND (SchuelerLernabschnittsdaten.Folgeklasse = Klassen.FKlasse)
SET Folgeklasse = null
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Klassen
);
add("Schüler-Lernabschnitt-Folge-Klassen-Zuordnung: Entferne den Folgeklassen-Eintrag, falls der nächste Lernabschnitt noch nicht definiert ist",
"""
UPDATE SchuelerLernabschnittsdaten
JOIN Schuljahresabschnitte ON (SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Schuljahresabschnitte.ID)
AND (Schuljahresabschnitte.FolgeAbschnitt_ID IS NULL)
AND (SchuelerLernabschnittsdaten.Folgeklasse IS NOT NULL)
SET Folgeklasse = NULL
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Klassen
);
add("Schüler-Lernabschnitt-Folge-Klassen-Zuordnung: Bestimme die FolgeKlassen-ID des Schüler-Lernabschnitts und setze diese",
"""
UPDATE SchuelerLernabschnittsdaten
JOIN Schuljahresabschnitte ON (SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Schuljahresabschnitte.ID)
AND (SchuelerLernabschnittsdaten.Folgeklasse IS NOT NULL)
AND (Schuljahresabschnitte.FolgeAbschnitt_ID IS NOT NULL)
JOIN Klassen ON (Schuljahresabschnitte.FolgeAbschnitt_ID = Klassen.Schuljahresabschnitts_ID)
AND (SchuelerLernabschnittsdaten.Folgeklasse = Klassen.Klasse)
SET Folgeklasse_ID = Klassen.ID
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Schuljahresabschnitte, Schema.tab_Klassen
);
add("Abteilungen: Ergänze das aktuelle Schuljahr der Schule, um die Gültigkeit der Abteilungsangaben festzulegen",
"""
UPDATE EigeneSchule_Abteilungen
SET Schuljahresabschnitts_ID = (
SELECT Schuljahresabschnitts_ID
FROM EigeneSchule
)
""",
Schema.tab_EigeneSchule_Abteilungen, Schema.tab_EigeneSchule
);
add("SchuelerLernabschnittsdaten: Erzeuge leere Abschnitte bei Schülern ohne aktuellen Lernabschnitt",
"""
INSERT INTO SchuelerLernabschnittsdaten(
Schueler_ID, Schuljahresabschnitts_ID, WechselNr, Schulbesuchsjahre, Hochrechnung, SemesterWertung, PruefOrdnung, Klassen_ID, Verspaetet,
NPV_Fach_ID, NPV_NoteKrz, NPV_Datum, NPAA_Fach_ID, NPAA_NoteKrz, NPAA_Datum, NPBQ_Fach_ID, NPBQ_NoteKrz, NPBQ_Datum, VersetzungKrz, AbschlussArt,
AbschlIstPrognose, Konferenzdatum, ZeugnisDatum, ASDSchulgliederung, ASDJahrgang, Jahrgang_ID, Fachklasse_ID, Schwerpunkt_ID, ZeugnisBem,
Schwerbehinderung, Foerderschwerpunkt_ID, OrgFormKrz, RefPaed, Klassenart, SumFehlStd, SumFehlStdU, Wiederholung, Gesamtnote_GS, Gesamtnote_NW, Folgeklasse_ID,
Foerderschwerpunkt2_ID, Abschluss, Abschluss_B, DSNote, AV_Leist, AV_Zuv, AV_Selbst, SV_Verant, SV_Konfl, SV_Koop, MoeglNPFaecher,
Zertifikate, DatumFHR, PruefAlgoErgebnis, Zeugnisart, DatumVon, DatumBis, FehlstundenGrenzwert, Sonderpaedagoge_ID, FachPraktAnteilAusr, BilingualerZweig,
Jahr, Abschnitt)
SELECT
ID AS Schueler_ID,
Schuljahresabschnitts_ID,
0 AS WechselNr,
Jahrgang AS Schulbesuchsjahre,
0 AS Hochrechnung,
'+' AS SemesterWertung,
PruefOrdnung,
Klassen_ID,
0 AS Verspaetet,
NULL AS NPV_Fach_ID,
NULL AS NPV_NoteKrz,
NULL AS NPV_Datum,
NULL AS NPAA_Fach_ID,
NULL AS NPAA_NoteKrz,
NULL AS NPAA_Datum,
NULL AS NPBQ_Fach_ID,
NULL AS NPBQ_NoteKrz,
NULL AS NPBQ_Datum,
NULL AS VersetzungKrz,
NULL AS AbschlussArt,
'-' AS AbschlIstPrognose,
NULL AS Konferenzdatum,
NULL AS ZeugnisDatum,
ASDSchulform AS ASDSchulgliederung,
ASDJahrgang,
Jahrgang_ID,
Fachklasse_ID,
Schwerpunkt_ID,
NULL AS ZeugnisBem,
Schwerbehinderung,
NULL AS Foerderschwerpunkt_ID,
OrgFormKrz,
RefPaed,
Klassenart,
NULL AS SumFehlStd,
NULL AS SumFehlStdU,
'-' AS Wiederholung,
NULL AS Gesamtnote_GS,
NULL AS Gesamtnote_NW,
NULL AS Folgeklasse_ID,
NULL AS Foerderschwerpunkt2_ID,
NULL AS Abschluss,
NULL AS Abschluss_B,
NULL AS DSNote,
NULL AS AV_Leist,
NULL AS AV_Zuv,
NULL AS AV_Selbst,
NULL AS SV_Verant,
NULL AS SV_Konfl,
NULL AS SV_Koop,
NULL AS MoeglNPFaecher,
NULL AS Zertifikate,
NULL AS DatumFHR,
NULL AS PruefAlgoErgebnis,
NULL AS Zeugnisart,
NULL AS DatumVon,
NULL AS DatumBis,
NULL AS FehlstundenGrenzwert,
NULL AS Sonderpaedagoge_ID,
'+' AS FachPraktAnteilAusr,
BilingualerZweig,
2000 AS Jahr,
1 AS Abschnitt
FROM Schueler
WHERE
(ID, Schuljahresabschnitts_ID) NOT IN (
SELECT Schueler_ID, Schuljahresabschnitts_ID FROM SchuelerLernabschnittsdaten)
AND Schuljahresabschnitts_ID IN (SELECT ID FROM Schuljahresabschnitte)
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Schueler, Schema.tab_Schuljahresabschnitte
);
add("SchuelerLernabschnittsdaten: Setze das Feld Schulbesuchsjahre beim aktuellen Abschnitt",
"""
UPDATE SchuelerLernabschnittsdaten
JOIN Schueler ON (SchuelerLernabschnittsdaten.Schuljahresabschnitts_ID = Schueler.Schuljahresabschnitts_ID)
AND (SchuelerLernabschnittsdaten.Schueler_ID = Schueler.ID)
SET SchuelerLernabschnittsdaten.Schulbesuchsjahre = Schueler.Jahrgang
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Schueler
);
add("SchuelerLernabschnittsdaten: Setze die Felder BilingualerZweig, AOSF, Autist, ZieldifferentesLernen bei allen Lernabschnitten eines Schülers",
"""
UPDATE SchuelerLernabschnittsdaten
JOIN Schueler ON (SchuelerLernabschnittsdaten.Schueler_ID = Schueler.ID)
SET
SchuelerLernabschnittsdaten.BilingualerZweig = Schueler.BilingualerZweig,
SchuelerLernabschnittsdaten.AOSF = Schueler.AOSF,
SchuelerLernabschnittsdaten.Autist = Schueler.Autist,
SchuelerLernabschnittsdaten.ZieldifferentesLernen = Schueler.ZieldifferentesLernen
""",
Schema.tab_SchuelerLernabschnittsdaten, Schema.tab_Schueler
);
add("EigeneSchule_Abteilungen: Ergänzen der Abteilungsinformationen für die restlichen Schuljahresabschnitte",
"""
INSERT INTO EigeneSchule_Abteilungen(Bezeichnung, Schuljahresabschnitts_ID, AbteilungsLeiter_ID, Sichtbar, Raum, Email, Durchwahl, Sortierung)
SELECT
abt.Bezeichnung,
abschnitt.ID AS Schuljahresabschnitts_ID,
abt.AbteilungsLeiter_ID,
abt.Sichtbar,
abt.Raum,
abt.Email,
abt.Durchwahl,
abt.Sortierung
FROM
EigeneSchule_Abteilungen abt
JOIN (
SELECT *
FROM Schuljahresabschnitte
WHERE ID NOT IN (
SELECT Schuljahresabschnitts_ID
FROM EigeneSchule_Abteilungen
)
) abschnitt
""",
Schema.tab_EigeneSchule_Abteilungen, Schema.tab_Schuljahresabschnitte
);
add("EigeneSchule_Abt_Kl: Ergänzen der Klasseninformation zu den Abteilungsinformationen für die restlichen Schuljahresabschnitte",
"""
INSERT INTO EigeneSchule_Abt_Kl(Abteilung_ID, Klasse, Klassen_ID, Sichtbar)
SELECT
mapping.id_ersatz AS Abteilung_ID,
abt_kl.Klasse,
-1 AS Klassen_ID,
abt_kl.Sichtbar
FROM EigeneSchule_Abt_Kl abt_kl
JOIN (
SELECT
a.ID AS id_orig,
b.ID AS id_ersatz
FROM (
(
SELECT * FROM EigeneSchule_Abteilungen WHERE ID IN (SELECT Abteilung_ID FROM EigeneSchule_Abt_Kl)
) a JOIN (
SELECT * FROM EigeneSchule_Abteilungen WHERE ID NOT IN (SELECT Abteilung_ID FROM EigeneSchule_Abt_Kl)
) b ON a.Bezeichnung = b.Bezeichnung
)
) mapping ON abt_kl.Abteilung_ID = mapping.id_orig
""",
Schema.tab_EigeneSchule_Abt_Kl, Schema.tab_EigeneSchule_Abteilungen
);
add("EigeneSchule_Abt_Kl: Umstellung auf Klassen-IDs",
"""
UPDATE EigeneSchule_Abt_Kl
JOIN EigeneSchule_Abteilungen ON EigeneSchule_Abt_Kl.Abteilung_ID = EigeneSchule_Abteilungen.ID
JOIN Klassen ON EigeneSchule_Abt_Kl.Klasse = Klassen.Klasse
AND EigeneSchule_Abteilungen.Schuljahresabschnitts_ID = Klassen.Schuljahresabschnitts_ID
SET
Klassen_ID = Klassen.ID
""",
Schema.tab_EigeneSchule_Abt_Kl, Schema.tab_EigeneSchule_Abteilungen, Schema.tab_Klassen
);
add("EigeneSchule_Faecher: Kopieren der Daten aus dem Feld Fachgruppe_ID in das Feld Zeugnisdatenquelle_ID",
"""
UPDATE EigeneSchule_Faecher
SET Zeugnisdatenquelle_ID = Fachgruppe_ID
WHERE Fachgruppe_ID IN (
SELECT SchildFgID
FROM Fachgruppen
)
""",
Schema.tab_EigeneSchule_Faecher, Schema.tab_Fachgruppen
);
add("Korrigiere case bei Pseudonoten.",
"""
UPDATE SchuelerEinzelleistungen
SET NotenKrz = upper(NotenKrz)
""",
Schema.tab_SchuelerEinzelleistungen
);
}
private void passeBenutzerTabellenAn() {
add("Users, Credentials: Übertrage die Password-Hashes in die Credentials-Tabelle",
"""
INSERT INTO Credentials(ID, Benutzername, PasswordHash)
SELECT
ID,
US_LoginName,
US_PasswordHash
FROM
Users
""",
Schema.tab_Credentials, Schema.tab_Users
);
add("BenutzerAllgemein: Kopiere alle nicht-Lehrer-Benutzer",
"""
INSERT INTO BenutzerAllgemein(ID, AnzeigeName, CredentialID)
SELECT
ID,
US_Name,
ID
FROM
Users
WHERE
US_LoginName NOT IN (
SELECT Kuerzel
FROM K_Lehrer
)
""",
Schema.tab_BenutzerAllgemein, Schema.tab_Users, Schema.tab_K_Lehrer
);
add("K_Lehrer: Setze die Kennwortinformationen aus der Benutzertabelle",
"""
UPDATE K_Lehrer
JOIN Users ON Users.US_LoginName = K_Lehrer.Kuerzel
SET
K_Lehrer.CredentialID = Users.ID
""",
Schema.tab_Users, Schema.tab_K_Lehrer
);
add("Benutzer: Erstelle Benutzer-Einträge für allgemeine Benutzer, die nicht in der Lehrer-Tabelle vorkommen",
"""
INSERT INTO Benutzer(ID, Typ, Allgemein_ID, IstAdmin)
SELECT
ID,
0,
ID,
CASE WHEN INSTR(US_Privileges, '$') > 0 THEN 1 ELSE 0 END
FROM
Users
WHERE
US_LoginName NOT IN (
SELECT Kuerzel
FROM K_Lehrer
)
""",
Schema.tab_Benutzer, Schema.tab_Users, Schema.tab_K_Lehrer
);
add("Benutzer: Erstelle Benutzer-Einträge für Benutzer, die in der Lehrer-Tabelle vorkommen",
"""
INSERT INTO Benutzer(ID, Typ, Lehrer_ID, IstAdmin)
SELECT
Users.ID,
1,
K_Lehrer.ID,
CASE WHEN INSTR(US_Privileges, '$') > 0 THEN 1 ELSE 0 END
FROM Users
JOIN K_Lehrer ON Users.US_LoginName = K_Lehrer.Kuerzel
""",
Schema.tab_Benutzer, Schema.tab_Users, Schema.tab_K_Lehrer
);
add("BenutzerEmail: Kopiere Email-Informationen aus der Users-Tabelle",
"""
INSERT INTO BenutzerEmail(Benutzer_ID, Email, EmailName, SMTPUsername, SMTPPassword, EMailSignature, HeartbeatDate, ComputerName)
SELECT
ID AS Benutzer_ID,
Email,
EmailName,
SMTPUsername,
SMTPPassword,
EmailSignature,
HeartbeatDate,
ComputerName
FROM
Users
WHERE
Email IS NOT NULL
AND EmailName IS NOT NULL
""",
Schema.tab_BenutzerEmail, Schema.tab_Users
);
add("Benutzergruppen: Übertrage die Benutzergruppen aus der Tabelle Usergroups",
"""
INSERT INTO Benutzergruppen(ID, Bezeichnung)
SELECT
UG_ID,
UG_Bezeichnung
FROM
Usergroups
WHERE
UG_ID IS NOT NULL
AND UG_Bezeichnung IS NOT NULL
""",
Schema.tab_Benutzergruppen, Schema.tab_Usergroups
);
add("BenutzergruppenKompetenzen: Übertrage die Kompetenzen der Benutzergruppen aus der Tabelle Usergroups",
"""
INSERT INTO BenutzergruppenKompetenzen(Gruppe_ID, Kompetenz_ID)
SELECT DISTINCT * FROM JSON_TABLE(
(
SELECT
CONCAT(
'[',
GROUP_CONCAT(
'{"Gruppe_ID":',
UG_ID,
',
"Kompetenz_ID":',
REPLACE(
REPLACE(UG_Kompetenzen,'$','-1'),';',
CONCAT(
'}, {"Gruppe_ID":',
UG_ID,
', "Kompetenz_ID":'
)
),
'}'
),
']'
)
FROM
Usergroups
WHERE
UG_Kompetenzen IS NOT NULL
AND TRIM(UG_Kompetenzen) <> ""
),
'$[*]' columns(
Gruppe_ID bigint path '$.Gruppe_ID',
Kompetenz_ID bigint path '$.Kompetenz_ID'
)
) AS GruppenKompetenzen
""",
Schema.tab_BenutzergruppenKompetenzen, Schema.tab_Usergroups
);
add("Benutzergruppen: Setze das Flag IstAdmin für administrative Gruppen",
"""
UPDATE Benutzergruppen
JOIN BenutzergruppenKompetenzen ON Benutzergruppen.ID = BenutzergruppenKompetenzen.Gruppe_ID
AND BenutzergruppenKompetenzen.Kompetenz_ID = -1
SET Benutzergruppen.IstAdmin = 1
""",
Schema.tab_Benutzergruppen, Schema.tab_BenutzergruppenKompetenzen
);
final String strInsertBenutzerGruppenKompetenzen = "INSERT INTO " + Schema.tab_BenutzergruppenKompetenzen.name() + "(Gruppe_ID, Kompetenz_ID)";
add(Schema.tab_BenutzergruppenKompetenzen.name() + ": Setze Default-Werte für die Stundenplanung anhand vorhandener Kompetenzen",
strInsertBenutzerGruppenKompetenzen
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.STUNDENPLAN_ALLGEMEIN_ANSEHEN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.LEHRERDATEN_ANSEHEN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id + ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.STUNDENPLAN_FUNKTIONSBEZOGEN_ANSEHEN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.ADMIN.daten.id + ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.STUNDENPLAN_IMPORT.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.IMPORT_EXPORT_DATEN_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.STUNDENPLAN_EXPORT.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.IMPORT_EXPORT_LEHRERDATEN_EXPORTIEREN.daten.id + ", "
+ BenutzerKompetenz.ADMIN.daten.id + ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.STUNDENPLAN_AENDERN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.ADMIN.daten.id + ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.STUNDENPLAN_AKTIVIEREN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.ADMIN.daten.id + ")",
Schema.tab_BenutzergruppenKompetenzen
);
add(Schema.tab_BenutzergruppenKompetenzen.name() + ": Setze Default-Werte für das Noten-Modul anhand der Kompetenzen zu den Schüler-Leistungsdaten",
strInsertBenutzerGruppenKompetenzen
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.NOTENMODUL_ADMINISTRATION.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.ADMIN.daten.id + ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.NOTENMODUL_NOTEN_AENDERN_ALLGEMEIN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.SCHUELER_LEISTUNGSDATEN_ALLE_AENDERN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.NOTENMODUL_NOTEN_AENDERN_FUNKTION.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.SCHUELER_LEISTUNGSDATEN_FUNKTIONSBEZOGEN_AENDERN.daten.id + ", "
+ BenutzerKompetenz.ADMIN.daten.id + ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.NOTENMODUL_NOTEN_ANSEHEN_ALLGEMEIN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.SCHUELER_LEISTUNGSDATEN_ANSEHEN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.NOTENMODUL_NOTEN_ANSEHEN_FUNKTION.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.SCHUELER_LEISTUNGSDATEN_ANSEHEN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")",
Schema.tab_BenutzergruppenKompetenzen
);
add(Schema.tab_BenutzergruppenKompetenzen.name() + ": Setze Default-Werte für das Datenbank-Management anhand der alten Kompetenz Backup durchführen",
strInsertBenutzerGruppenKompetenzen
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.DATENBANK_SCHEMA_ERSTELLEN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_BACKUP_DURCHFUEHREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id + ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.DATENBANK_SQLITE_IMPORT.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_BACKUP_DURCHFUEHREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id + ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.DATENBANK_SQLITE_EXPORT.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_BACKUP_DURCHFUEHREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id + ")",
Schema.tab_BenutzergruppenKompetenzen
);
add(Schema.tab_BenutzergruppenKompetenzen.name() + ": Setze Default-Werte für Oberstufenberechnungen anhand der alten Kompetenz zum Kurs42-Import",
strInsertBenutzerGruppenKompetenzen
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.OBERSTUFE_LAUFBAHNPLANUNG_ALLGEMEIN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.OBERSTUFE_LAUFBAHNPLANUNG_FUNKTIONSBEZOGEN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.OBERSTUFE_LUPO_IMPORT.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.OBERSTUFE_KURSPLANUNG_ALLGEMEIN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.OBERSTUFE_KURSPLANUNG_FUNKTIONSBEZOGEN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.OBERSTUFE_KURSPLANUNG_BLOCKUNG_AKTIVIEREN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.OBERSTUFE_KLAUSURPLANUNG_AENDERN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.OBERSTUFE_KLAUSURPLANUNG_ANSEHEN_ALLGEMEIN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.OBERSTUFE_KLAUSURPLANUNG_ANSEHEN_FUNKTION.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")",
Schema.tab_BenutzergruppenKompetenzen
);
add(Schema.tab_BenutzergruppenKompetenzen.name() + ": Setze Default-Werte für Oberstufenberechnungen anhand der alten Kompetenz zum Kurs42-Import",
strInsertBenutzerGruppenKompetenzen
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.ABITUR_ANSEHEN_ALLGEMEIN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.ABITUR_ANSEHEN_FUNKTIONSBEZOGEN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.ABITUR_AENDERN_ALLGEMEIN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.ABITUR_AENDERN_FUNKTIONSBEZOGEN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.ABITUR_EINGABE_ERGEBNISSE_ALLGEMEIN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")"
+ " UNION "
+ "SELECT Gruppe_ID, " + BenutzerKompetenz.ABITUR_EINGABE_ERGEBNISSE_FUNKTIONSBEZOGEN.daten.id
+ " FROM " + Schema.tab_BenutzergruppenKompetenzen.name()
+ " WHERE Kompetenz_ID IN (" + BenutzerKompetenz.EXTRAS_DATEN_AUS_KURS42_IMPORTIEREN.daten.id + ", " + BenutzerKompetenz.ADMIN.daten.id
+ ")",
Schema.tab_BenutzergruppenKompetenzen
);
add("BenutzergruppenKompetenzen: Entferne alte Admin-Einträge, da diese keine Verweise auf die Kompetenztabelle besitzen",
"""
DELETE FROM BenutzergruppenKompetenzen
WHERE Kompetenz_ID = -1
""",
Schema.tab_BenutzergruppenKompetenzen
);
add("BenutzergruppenMitglieder: Füge die Benutzer aus der Tabelle Users zu den Benutzergruppen hinzu",
"""
INSERT INTO BenutzergruppenMitglieder(Gruppe_ID, Benutzer_ID)
SELECT DISTINCT * FROM JSON_TABLE(
(
SELECT
CONCAT(
'[',
GROUP_CONCAT(
'{"Gruppe_ID":',
REPLACE(
REPLACE(US_UserGroups,'$','-1'),
';',
CONCAT(
', "Benutzer_ID": ',
ID,
'}, {"Gruppe_ID":'
)
),
', "Benutzer_ID":',
ID,
'}'
),
']'
)
FROM
Users
WHERE
US_UserGroups IS NOT NULL
AND TRIM(US_UserGroups) <> ""
),
'$[*]' columns(
Gruppe_ID bigint path '$.Gruppe_ID',
Benutzer_ID bigint path '$.Benutzer_ID'
)
) AS GruppenMitglieder
""",
Schema.tab_BenutzergruppenMitglieder, Schema.tab_Users
);
add("BenutzergruppenMitglieder: Entferne fehlerhafte Einträge für Gruppen, die nicht existieren",
"""
DELETE FROM BenutzergruppenMitglieder
WHERE Gruppe_ID NOT IN (
SELECT ID
FROM Benutzergruppen
)
""",
Schema.tab_BenutzergruppenMitglieder, Schema.tab_Benutzergruppen
);
add("Benutzer: Setze das Flag IstAdmin für administrative Benutzer, falls es von einer Gruppenzuweisung geerbt wird",
"""
UPDATE Benutzer
JOIN BenutzergruppenMitglieder ON Benutzer.ID = BenutzergruppenMitglieder.Benutzer_ID
JOIN Benutzergruppen ON BenutzergruppenMitglieder.Gruppe_ID = Benutzergruppen.ID AND Benutzergruppen.IstAdmin = 1
SET Benutzer.IstAdmin = 1
""",
Schema.tab_Benutzer, Schema.tab_BenutzergruppenMitglieder, Schema.tab_Benutzergruppen
);
add("BenutzerKompetenzen: Entferne alle Benutzerkompetenzen, die nicht in der Tabelle Kompetenzen definiert sind",
"""
DELETE FROM BenutzerKompetenzen
WHERE Kompetenz_ID NOT IN (
SELECT KO_ID
FROM Kompetenzen
)
""",
Schema.tab_BenutzerKompetenzen, Schema.tab_Kompetenzen
);
add("BenutzergruppenKompetenzen: Entferne alle Gruppenkompetenzen, die nicht in der Tabelle Kompetenzen definiert sind",
"""
DELETE FROM BenutzergruppenKompetenzen
WHERE Kompetenz_ID NOT IN (
SELECT KO_ID
FROM Kompetenzen
)
""",
Schema.tab_BenutzergruppenKompetenzen, Schema.tab_Kompetenzen
);
add("Benutzer: Prüfe, ob der Admin-Benutzer auch administrative Rechte hat, falls es keinen anderen administrativen Benutzer gibt",
"""
UPDATE Benutzer b
JOIN BenutzerAllgemein ba ON b.Allgemein_ID = ba.ID
JOIN Credentials c ON ba.CredentialID = c.ID AND Benutzername = 'Admin'
SET b.IstAdmin = 1
WHERE (
SELECT count(*) FROM Benutzer b
LEFT JOIN BenutzergruppenMitglieder m ON b.ID = m.Benutzer_ID
LEFT JOIN Benutzergruppen g ON m.Gruppe_ID = g.ID
WHERE b.IstAdmin <> 0 OR g.IstAdmin <> 0
) = 0
""",
Schema.tab_Benutzer, Schema.tab_BenutzerAllgemein, Schema.tab_Credentials
);
add("SchuelerWiedervorlage: Entferne Einträge, die keinem gültigen Benutzer zugeordnet sind.",
"""
DELETE FROM SchuelerWiedervorlage WHERE User_ID NOT IN (SELECT ID FROM Benutzer)
""",
Schema.tab_Benutzer, Schema.tab_SchuelerWiedervorlage
);
}
private void korrigiereFachkombinationen() {
add("NichtMoeglAbiFachKombi: Entferne alle Einträge, bei denen das angegebene Fach nicht als Fach der gymnasialen Oberstufe gekennzeichnet ist",
"""
DELETE NichtMoeglAbiFachKombi FROM NichtMoeglAbiFachKombi
JOIN EigeneSchule_Faecher f1 ON NichtMoeglAbiFachKombi.Fach1_ID = f1.ID
JOIN EigeneSchule_Faecher f2 ON NichtMoeglAbiFachKombi.Fach2_ID = f2.ID
WHERE f1.BasisFach IS NULL OR f1.BasisFach = '-' OR f2.BasisFach IS NULL OR f2.BasisFach = '-'
""",
Schema.tab_NichtMoeglAbiFachKombi, Schema.tab_EigeneSchule_Faecher
);
}
private void updateSchuelerNachnameZusatz() {
final String sql = "UPDATE %s SET %s = concat(%s, ' ', %s) WHERE %s IS NOT NULL";
add("Kopiere den Namenszusatz an den Anfang des Nachnamens",
sql.formatted(Schema.tab_Schueler.name(),
Schema.tab_Schueler.col_Name.name(),
Schema.tab_Schueler.col_ZusatzNachname.name(),
Schema.tab_Schueler.col_Name.name(),
Schema.tab_Schueler.col_ZusatzNachname.name()),
Schema.tab_Schueler
);
add("Erzieher 1 - Kopiere den Namenszusatz an den Anfang des Nachnamens",
sql.formatted(Schema.tab_SchuelerErzAdr.name(),
Schema.tab_SchuelerErzAdr.col_Name1.name(),
Schema.tab_SchuelerErzAdr.col_Erz1ZusatzNachname.name(),
Schema.tab_SchuelerErzAdr.col_Name1.name(),
Schema.tab_SchuelerErzAdr.col_Erz1ZusatzNachname.name()),
Schema.tab_SchuelerErzAdr
);
add("Erzieher 2 - Kopiere den Namenszusatz an den Anfang des Nachnamens",
sql.formatted(Schema.tab_SchuelerErzAdr.name(),
Schema.tab_SchuelerErzAdr.col_Name2.name(),
Schema.tab_SchuelerErzAdr.col_Erz2ZusatzNachname.name(),
Schema.tab_SchuelerErzAdr.col_Name2.name(),
Schema.tab_SchuelerErzAdr.col_Erz2ZusatzNachname.name()),
Schema.tab_SchuelerErzAdr
);
}
private void uebertrageLehrerStammschule() {
final String sql = "UPDATE %s la JOIN %s l ON la.%s = l.%s SET la.%s = l.%s";
add("Übertrage die Information zur Stammschule in die Abschnittsdaten des Lehrers",
sql.formatted(Schema.tab_LehrerAbschnittsdaten.name(),
Schema.tab_K_Lehrer.name(),
Schema.tab_LehrerAbschnittsdaten.col_Lehrer_ID.name(),
Schema.tab_K_Lehrer.col_ID.name(),
Schema.tab_LehrerAbschnittsdaten.col_StammschulNr.name(),
Schema.tab_K_Lehrer.col_StammschulNr.name()),
Schema.tab_K_Lehrer, Schema.tab_LehrerAbschnittsdaten
);
}
private void verschiebeDatenVonEigeneSchule() {
add("Übertrage das Schullogo in eine eigene Tabelle",
"INSERT INTO %s (%s, %s) SELECT %s, %s FROM %s"
.formatted(Schema.tab_EigeneSchule_Logo.name(),
Schema.tab_EigeneSchule_Logo.col_EigeneSchule_ID.name(),
Schema.tab_EigeneSchule_Logo.col_LogoBase64.name(),
Schema.tab_EigeneSchule.col_ID.name(),
Schema.tab_EigeneSchule.col_SchulLogoBase64.name(),
Schema.tab_EigeneSchule.name()),
Schema.tab_EigeneSchule, Schema.tab_EigeneSchule_Logo);
add("Verschiebe die Schild2-Einstellung in die Client-Konfigurations-Tabelle für globale Einstellungen",
"INSERT INTO %s (%s, %s, %s) SELECT '%s', '%s', %s FROM %s WHERE %s IS NOT NULL"
.formatted(Schema.tab_Client_Konfiguration_Global.name(),
Schema.tab_Client_Konfiguration_Global.col_AppName.name(),
Schema.tab_Client_Konfiguration_Global.col_Schluessel.name(),
Schema.tab_Client_Konfiguration_Global.col_Wert.name(),
"Schild2",
"Einstellungen",
Schema.tab_EigeneSchule.col_Einstellungen.name(),
Schema.tab_EigeneSchule.name(),
Schema.tab_EigeneSchule.col_Einstellungen.name()),
Schema.tab_EigeneSchule, Schema.tab_EigeneSchule_Logo);
}
private void korrigiereCaseUbergangsempfehlungenUndSchulformen() {
add("Korrigiere den Case bei den Übergangsempfehlungen",
"UPDATE %1$s SET %2$s = upper(%2$s) WHERE %2$s <> upper(%2$s)".formatted(Schema.tab_Schueler.name(),
Schema.tab_Schueler.col_Uebergangsempfehlung_JG5.name()),
Schema.tab_Schueler);
add("Korrigiere den Case bei der ersten Schulform in der Sek I",
"UPDATE %1$s SET %2$s = upper(%2$s) WHERE %2$s <> upper(%2$s)".formatted(Schema.tab_Schueler.name(),
Schema.tab_Schueler.col_ErsteSchulform_SI.name()),
Schema.tab_Schueler);
add("Korrigiere den Case bei der Spalte LSSchulform in der Tabelle Schueler",
"UPDATE %1$s SET %2$s = upper(%2$s) WHERE %2$s <> upper(%2$s)".formatted(Schema.tab_Schueler.name(),
Schema.tab_Schueler.col_LSSchulform.name()),
Schema.tab_Schueler);
add("Korrigiere den Case bei der Spalte LSSchulformSIM in der Tabelle Schueler",
"UPDATE %1$s SET %2$s = upper(%2$s) WHERE %2$s <> upper(%2$s)".formatted(Schema.tab_Schueler.name(),
Schema.tab_Schueler.col_LSSchulformSIM.name()),
Schema.tab_Schueler);
}
}