Stored Procedures in MySQL

11
© Mayflower GmbH 2011 Stored Procedures in MySQL Michele Catalano I 06.10.2011

Transcript of Stored Procedures in MySQL

Page 1: Stored Procedures in MySQL

© Mayflower GmbH 2011

Stored Procedures in MySQL

Michele Catalano I 06.10.2011

Page 2: Stored Procedures in MySQL

Mayflower GmbH I 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

Page 3: Stored Procedures in MySQL

Mayflower GmbH I 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

Page 4: Stored Procedures in MySQL

Mayflower GmbH I 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

Page 5: Stored Procedures in MySQL

Mayflower GmbH I 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.

Page 6: Stored Procedures in MySQL

Mayflower GmbH I 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

Page 7: Stored Procedures in MySQL

Mayflower GmbH I 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!

Page 8: Stored Procedures in MySQL

Mayflower GmbH I 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.

Page 9: Stored Procedures in MySQL

Mayflower GmbH I 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.

Page 10: Stored Procedures in MySQL

Mayflower GmbH I 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

Page 11: Stored Procedures in MySQL

25.10.2011 Mayflower GmbH 11

Vielen Dank für Ihre Aufmerksamkeit!

Referent Michele Catalano

[email protected]

+49 89 242054 1112

Mayflower GmbH

Mannhardtstrasse 6

80538 München