= Interaktives SQL E-Learning Modul :author: Jan Klemkow, Benjamin Franzke :lang: de :imagesdir: image == IST-Zustand * Datenbank-Lektionen in Moodle * Online-Web-Tutorial mit Oracle (Nils Weber) == Projekt Ziel * interaktive SQL-Tests innerhalb von Moodle * Auswertung des Lernfortschritts * PostgreSQL als Datenbank == Problem: Benutzertrennung image:conflict.svg[height="85%"] == Transaktionen [source,sql] ---- # sqlbox instruction BEGIN TRANSACTION; # User Input: SELECT * FROM blub; # sqlbox instruction ROLLBACK TRANSACTION; ---- == Transaktionen [source,sql] ---- # sqlbox instruction BEGIN TRANSACTION; # User Input: INSET INTO blub VALUES (1,'foo') COMMIT TRANSACTION; BEGIN TRANSACTION; SELECT * FROM blub; # sqlbox instruction ROLLBACK TRANSACTION; ---- == Separate Datenbanken image:multi-db.svg[height="85%"] == Read-Only image:read-only.svg[height="85%"] [source,sql] ---- create user sqlbox_read with password 'XXXXXX'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO sqlbox_read; ---- == SQLBox Modul * Moodle-Aktivitäts-Modul * Eine Instanz pro Aufgabe * Geteilte Datenbank für alle Instanzen * 3-Teilig ** Hauptteil (view): Aufgabenstellung + Query + Ergebnis-Tabelle ** Report: Anzeige der Anfragen pro SQLBox (Korrekt/Fehlerhaft?) ** Reportall: Anzeige aller Nutzer mit allen SQLBoxen & Fortschritt * Nutzung von Moodle-Abstraktion z.b. für HTML-Table + -> konsistentes Aussehen + -> kompakter Programmcode == Benutzer-Anfrage image:query.svg[width="100%"] == Testdaten * Kopieren der Daten aus Oracle-Datenbank * Importieren der Beispieldaten in PostgreSQL * Konvertierung der Aufgaben zu SQLBox [source,sql] ---- select dbms_xmlgen.getxml ('select * from lessons') from dual; ---- * Transformation der XML Datensätze mit XSLT + -> SQL Statements für KAPV-Datenbank + -> Kommandozeilenaufrufe von curl für automatisches Anlegen von Aufgaben == Demonstration Demonstration! // vim: ft=asciidoc :