ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
33525
33525
EMPFEHLEN
-
23.11.06 23:20 #1
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Hier mal ein kleines Beispiel dazu wie man unter MySQL 5 mit Stored Procedures
arbeiten kann. In diesem Fall haben wir eine Stored Procedure die Zeilenweise
für das Ergebnis einer Abfrage mit den Werten der aktuellen Ergebniszeile eine
andere StoredProcedure aufruft.
Wir erzeugen eine Beispieltabelle mit ein paar Daten.
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
mysql> CREATE TABLE bubu(id INT NOT NULL AUTO_INCREMENT, VALUE VARCHAR(32), PRIMARY KEY(id)); Query OK, 0 ROWS affected (0.06 sec) mysql> INSERT INTO bubu (VALUE) VALUES ('A'); Query OK, 1 ROW affected (0.03 sec) mysql> INSERT INTO bubu (VALUE) VALUES ('B'); Query OK, 1 ROW affected (0.03 sec) mysql> INSERT INTO bubu (VALUE) VALUES ('C'); Query OK, 1 ROW affected (0.03 sec) mysql> SELECT * FROM bubu; +----+-------+ | id | VALUE | +----+-------+ | 1 | A | | 2 | B | | 3 | C | +----+-------+ 3 ROWS IN SET (0.00 sec)
Hier setzen wir einen "DELIMITER" String.
Code sql:1
mysql> delimiter //
Wir definieren unsere Stored Procedure welche wir für jede Ergebniszeile aufrufen
möchten.
Code sql:1 2 3 4 5 6 7
mysql> CREATE PROCEDURE bubuProcedure(bubuParam VARCHAR(32)) -> BEGIN -> SELECT LOWER(bubuParam); -> END; -> // Query OK, 0 ROWS affected (0.03 sec)
Hier definieren wir die Stored Procedure die über die Ergebniszeilen der
SELECT id,value FROM BUBU; Abfrage drüber laufen soll und dann für jede Zeile die
bubuProcedure(value) mit dem Parameter value aufruft.
Eine eventuell vorhandene Procedure könnte man über:
löschen.Code sql:1 2
mysql> DROP PROCEDURE forEachRowInBubu; -> //
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
mysql> CREATE PROCEDURE forEachRowInBubu() -> BEGIN -> DECLARE val VARCHAR(32); -> DECLARE finished INT DEFAULT 0; -> DECLARE bubuCursor CURSOR FOR SELECT VALUE FROM BUBU; -> DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET finished = 1; -> -> OPEN bubuCursor; -> REPEAT -> FETCH bubuCursor INTO val; -> IF NOT finished THEN -> CALL bubuProcedure(val); -> END IF; -> UNTIL finished END REPEAT; -> -> CLOSE bubuCursor; -> END; -> // Query OK, 0 ROWS affected (0.00 sec)
Btw. Hiermit definieren wir einen "Continue"-Handler für den Fall das
die Abfrage keine Ergebnisse liefert:
Error: 1329 SQLSTATE: 02000 (ER_SP_FETCH_NO_DATA)Code sql:1
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET finished = 1;
Message: No data - zero rows fetched, selected, or processed
Siehe auch:
http://dev.mysql.com/doc/refman/5.0/...es-server.html
Unser Aufruf:
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
mysql> CALL forEachRowInBubu(); -> // +------------------+ | LOWER(bubuParam) | +------------------+ | a | +------------------+ 1 ROW IN SET (0.00 sec) +------------------+ | LOWER(bubuParam) | +------------------+ | b | +------------------+ 1 ROW IN SET (0.00 sec) +------------------+ | LOWER(bubuParam) | +------------------+ | c | +------------------+ 1 ROW IN SET (0.00 sec) Query OK, 0 ROWS affected (0.00 sec)
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
MySQL Stored Procedures
Von real-insanity im Forum PHPAntworten: 0Letzter Beitrag: 28.04.09, 19:09 -
Stored Procedures in MySQL
Von NBOne im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 30.07.08, 23:08 -
mySQL > Stored Procedures
Von fa_herrmann im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 25.04.07, 19:21 -
MySQL 5.0.16 & MySQL-Administrator 1.1.5 Probleme mit Stored Procedures
Von DealeyLama im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 28.11.05, 02:11






Zitieren
Login





