# mySQL > Stored Procedures



## fa_herrmann (25. April 2007)

Moin miteinander,

folgendes Problem habe ich mit einer SP unter mySQL 5.*:

Eine Abfrage  a la

INSERT INTO Table (Spalte1, Spatlte2) (SELECT Spalte1, Spalte2 FROM Table WHERE ID=1)

funktioniert logischerweise problemlos und legt damit eine Kopie eines Satzes an... Da ich den (Auto)-ID Wert des neuen Satzes brauche, und ich den Tabellentyp nicht umsellen kann, um transaktional zu arbeiten, es in mySQL aber auch nichts wie die interne Inserted-Table wie auf dem SQL-Server gibt, wollte ich den Kram wenigstens in eine Prozedur kapseln...

Also
BEGIN
INSERT INTO Table (Spalte1, Spatlte2) (SELECT Spalte1, Spalte2 FROM Table WHERE ID=1)
SELECT MAX(ID)FROM Table
END

Das mag das blöde Ding aber nicht...

Es kann doch aber nicht mal unter mySQL so schwer sein, den neuen Autowert eines neuen Sates halbwegs zweifelsfrei zu bestimmen... Ohne das auf den Client auslagern zu müssen...

cul,
Falk


----------



## jeipack (25. April 2007)

Hi

Mhh diese MAX(ID) muss ja noch zurück gegeben werden.

also sowas:


```
DELIMITER $$

BEGIN
DECLARE maxid INT DEFAULT 0;
INSERT INTO Table (Spalte1, Spatlte2) (SELECT Spalte1, Spalte2 FROM Table WHERE ID=1);
SELECT MAX(ID) INTO maxid FROM Table;

return maxid;
END $$
```

Probiers mal so.

Gruss
jeipack


----------



## fa_herrmann (25. April 2007)

Hi

Mhh diese MAX(ID) muss ja noch zurück gegeben werden.

...ja, ist klar. Der Fehler lag woanders: Der INPUT-Parameter war namensgleich einem Spaltennamen...

Das ist allerdings auch ziemlich sinnfrei gelöst. Können die das nicht so machen wie eine ordentliche Datenbank, also @parametername statt parametername?

Ziemlich verwirrend. Na immerhin gibt's ja unter mySQL mittlerweile wenigstens SPs, nachdem die jahrelang nur angekündigt waren... Da lob' ich mir doch SQL-Server.

Danke trotzdem für die schnelle Reaktion.

cul,
Falk


----------

