2. CREATE PROCEDURE
I CREATE PROCEDURE
name ([IN|OUT|INOUT] varname type …)
Variablen definition
DEFINER Manuelles definieren des Besitzers der Prozedur (default Ersteller)
DETERMINISTIC Bei identischen Input gleicher Output.
CONTAINS SQL | NO SQL | READS SQL DATA |
MODIFIES SQL DATA
Definiert der Sprache bzw. ob Daten nur gelesen oder auch manipuliert werden.
SQL SECURITY (DEFINER | INVOKER )
Definiert mit welchen Rechten die Prozedur ausgeführt wird.
BEGIN … END Block mit der eigentlichen Prozedur
I delimiter
Mayflower GmbH I 2
3. Grundlagen Flow Control
I IF .. ELSEIF … ELSE … ENDIF
I CASE … (WHEN … THEN) … ELSE … END CASE
I label: LOOP … END LOOP
I [label:] REPEAT … UNTIL … END REPEAT
I [label:] WHILE … DO … END WHILE [label]
I LEAVE label
I INTERATE label
Mayflower GmbH I 3
4. DECLARE Handler
I DECLARE HANDLER
TYPE
CONTINUE Weiter ausführen des Codes im BEGIN...END Block
EXIT Abbrechen der Ausführung des Codes im BEGIN...END Block
CONDITION
SQLSTATE sqlstate_value
Abfangen eines bestimmten SQLSTATE Wert
SQLWARNING Abfangen alle SQLSTATS die mit '01' beginnen
NOT FOUND Abfangen alle SQLSTATS die mit '02' beginnen
SQLEXCEPTION
Abfangen alle SQLSTATS die mit '00', '01' und '02' beginnen
Mayflower GmbH I 4
5. DECLARE Variablen
I DECLARE VARIABLE
var_name, [var_name]... type [DEFAULT value]
I var_name ist alphanumerisch
I type ist ein valider SQL Feld Type (z.B. CHAR, VARCHAR)
I value ist der Standard Wert welche der variable beim deklarieren
zugewiesen wird.
Mayflower GmbH I 5
6. GRUNDLAGEN CURSOR
I DECLARE name CURSOR FOR sqlstatement
Deklarieren des CURSORS für denn SQL Befehl
I OPEN name
Öffnen des CURSORS
I FETCH name INTO
Iterieren über die Ergebnisse des CURSORS
Um das Ende der Daten zu erkennen muss unbedingt ein HANDLER für
NOT FOUND definiert werden.
I CLOSE name
Schließen des CURSORS
Mayflower GmbH I 6
7. RECHTE
I CREATE PROCEDURE
I ALTER PROCEDURE
I DROP PROCEDURE
I CALL
Ohne diese Recht kann keine Prozedur ausgeführt werden!!
I Wenn die Prozedur mit 'SQL SECURITY INVOKER' erstellt wurde
muss der Caller auch alle rechte für die in der Prozedur
verwendeten SQL Statements haben!
Mayflower GmbH I 7
8. Vorteile
I Sehr Mächtige Datenmanipulationsmöglichkeit
I Interessante Möglichkeit zusammen mit Trigger
I Gut nutzbar für komplexes Reporting
I Einfaches Hilfswerkzeug für Datenbank redesign
I Abfragen von Daten für die der Caller nicht direkt die Rechte hat.
Mayflower GmbH I 8
9. Nachteile
I Einbindung in ein Continues Integrations Umgebung nicht
gegeben.
I Testbarkeit eigentlich nicht vorhanden
I Kein Debugging
I Mischung von Daten und Logik
I Schlecht ein schätzbare Last auf Datenbankservern für
Performance Tunning
I Unsicherheit im zusammenspiele mit Master/Slave bin log
I Ein Caller kann durch die Prozedur auch auf Daten für die er
keine Zugriffsrechte hat zugreifen.
Mayflower GmbH I 9
10. Quellenverweise
I MySQL Manual:
http://dev.mysql.com/doc/refman/5.1/en/stored-programs-defining.html
http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-compound-statements.html
http://dev.mysql.com/doc/refman/5.1/en/stored-programs-logging.html
http://dev.mysql.com/doc/refman/5.1/en/stored-programs-security.html
http://dev.mysql.com/doc/refman/5.1/en/call.html
http://dev.mysql.com/doc/refman/5.1/en/stored-routines-privileges.html
http://dev.mysql.com/doc/refman/5.1/en/stored-program-restrictions.html
Mayflower GmbH I 10
11. Vielen Dank für Ihre Aufmerksamkeit!
Referent Michele Catalano
michele.catalano@mayflower.de
+49 89 242054 1 12
1
Mayflower GmbH
Mannhardtstrasse 6
80538 München
25.10.2011 Mayflower GmbH 11