Zum Inhalt springen
Der Guide für ein smartes Leben.
Aufgabenverteilung

Teil 2: MySQL Stored Procedures

Autoren: Redaktion pcmagazin und Andreas Hitzig • 18.3.2009 • ca. 2:05 Min

ob die Zuweisung erfolgreich verlaufen ist. Die Prozedur change_agent() soll der Variablen agent einen neuen Wert zuweisen. Da diese Variable global definiert ist und somit sowohl innerhalb, wie auch außerhalb der Prozedur verändert werden kann, muss diese nicht an die Prozedur mit übergeben werd...

ob die Zuweisung erfolgreich verlaufen ist. Die Prozedur change_agent() soll der Variablen agent einen neuen Wert zuweisen. Da diese Variable global definiert ist und somit sowohl innerhalb, wie auch außerhalb der Prozedur verändert werden kann, muss diese nicht an die Prozedur mit übergeben werden.

CREATE PROCEDURE change_agent(p
VARCHAR(10)) SET @agent = p;

Da der IN-Parameter der Standard-Wert ist, muss er an dieser Stelle nicht explizit aufgeführt werden. Der Übergabewert p kann in Webdesignnerhalb der Variable genutzt und verändert werden, hat jedoch nach Beendigung der Prozedur wieder seinen alten Wert.

OUT und INOUT

Bei der OUT-Variante wird wie bereits erwähnt kein Wert an die Prozedur geliefert sondern nur ein Rückgabewert erwartet, dem Sie eine Variable zuweisen müssen. Setzen Sie dazu als Erstes den Wert des Agenten wieder auf bond007.

MySQL Stored Procedures
Beim Beispiel mit dem OUT-Parameter wird eine globale Variable verändert und zurückgegeben.
© Archiv
SET @agent='bond007';

Erzeugen Sie anschließend eine Prozedur, welcher Sie eine Variable übergeben, die anschließend in der Prozedur verändert wird.

CREATE PROCEDURE change_agent2
(OUT p VARCHAR(10)) SET p ='bond008';

Der Aufruf

CALL change_agent2(@agent)

weist der Variablen @agent schließlich den neuen Wert bond008 zu.

Die dritte Variante kann sowohl einen Wert mitgeben als auch einen Wert zurückgeben.

CREATE PROCEDURE change_agent3
(INOUT p INT) SET @leben=p*2;

Somit wird der globalen Variablen @leben innerhalb der Prozedur der doppelte Wert zugewiesen und dieser ist auch außerhalb der Prozedur weiter verfügbar. Der Aufruf

CALL change_agent3(40)

übergibt somit in die Prozedur die Zahl 40, welche verdoppelt und anschließend mit der globalen Variablen @leben verknüpft wird.

Prozedur-Aufbau

Eine Prozedur besitzt somit folgenden Aufbau: CREATE PROCEDURE name ([parameter]) [zusätze] BEGIN Anweisungen END

Wobei der Parameter noch einmal genauer spezifiziert ist mit [IN / OUT / INOUT] parameter_name DATENTYP.

Beim Anlegen einer Prozedur können Sie darüber hinaus noch eine Reihe von Zusätzen verwenden, die sich untereinander frei kombinieren lassen: • LANGUAGE SQL legt die Sprache fest, in welcher die Prozedur geschrieben wird. Aktuell steht nur SQL zur Verfügung. • NOT DETERMINISTIC beschreibt, dass die Prozedur bei gleicher Eingabe nicht immer den gleichen Rückgabewert zur Verfügung stellt. Das Gegenteil wäre DETERMINISTIC. • MODIFIES SQL DATA zeigt an, dass Daten durch die Prozedur verändert werden können. Alternativ zu diesem Wert gibt es noch CONTAINS SQL, NO SQL und READS SQL DATA. Der Erste aus dieser Gruppe beschreibt, dass Prozedur weder lesend noch schreibend auf Daten zugreift und die letzten beiden geben an, dass keine SQL-Befehle ausgeführt werden oder nur lesend auf die Datenbank zugegriffen wird. • SQL SECURITY DEFINER bestimmt, welche Berechtigungen beim Ausführen der Prozedur in Betracht gezogen werden sollen. Es stehen Anleger (DEFINER) und Aufrufender (INVOKER) zur Auswahl. • COMMENT: Spezielles Kommentarfeld zu einer Produktion.

Bevor Sie nun loslegen mit der Entwicklung Ihrer ersten größeren Prozedur lohnt ein Blick zurück - mithilfe des Befehls SHOW PROCEDURE STATUS \G sehen Sie alle in der Datenbank vorhandenen Stored Procedures.