Aufgabenverteilung
Teil 2: MySQL Stored Procedures
- MySQL Stored Procedures
- Teil 2: MySQL Stored Procedures
- Teil 3: MySQL Stored Procedures
- Teil 4: MySQL Stored Procedures
- Teil 5: MySQL Stored Procedures
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.

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.