Oracle compared to MySQL: to_date('28.01.08','dd.mm.yy') --> str_to_date('28.01.08','%d.%m.%y') ELSIF --> ELSEIF CREATE PROCEDURE CREATE PROCEDURE sp_name sp_name IS var_a INTEGER; BEGIN BEGIN DECLARE variable1 INTEGER; DECLARE EXIT HANDLER FOR NOT FOUND SET var_a = 0; var_a := 55; SET var_a = 55; SELECT col_a INTO var_a SELECT col_a INTO var_a FROM a_table FROM a_table WHERE rownum < 2; LIMIT 1; EXCEPTION WHEN NO_DATA_FOUND THEN var_a := 0; END; END Ein paar Fallstricke bei MySQL (und wahrscheinlich auch bei anderen Datenbanken) SELECT serial_no, expiring_date AS old_date, FLOOR(RAND() * 200) AS days, adddate(expiring_date, -1 * FLOOR(RAND() * 200)) AS new_date FROM profile WHERE serial_no < 10; +-----------+---------------+------+------------+ | serial_no | old_date | days | new_date | +-----------+---------------+------+------------+ | 0 | NULL | 72 | NULL | | 1 | 2031-12-04 | 140 | 2031-09-09 | | 2 | 2031-12-04 | 8 | 2031-06-05 | | 4 | 2031-12-04 | 86 | 2031-09-10 | | 5 | 2031-12-04 | 166 | 2031-06-10 | | 6 | 2031-12-04 | 188 | 2031-11-24 | | 7 | 2031-12-04 | 87 | 2031-11-29 | | 8 | 2031-12-04 | 164 | 2031-11-26 | | 9 | 2031-12-04 | 146 | 2031-08-19 | +-----------+---------------+------+------------+ 10 rows In der Tat wird man nämlich feststellen, dass "days" eben gerade nicht die Differenz zischen old_date und new_date ist. Nach kurzem Nachdenken wird klar warum das so ist: rand() wird eben nicht nur einmal pro Zeile evaluiert, sondern an jeder Stelle, wo es im SQL statement vorkommt, wieder neu. Für diese 10 Zeilen, die wir abgefragt haben, also insgesamt 20 mal. FAZIT: Es lohnt sich allemal für solche Funktionen wie rand(), now() oder ähnliche einen genauen Blick in die jeweilige Dokumentation zu werfen. Im Fall von rand() lässt sich das ja noch durch einen Test selber ermitteln. Bei now() kommt man da aber erst mal nicht weiter. Mit now() hätten wir in unseren obigen Abfrage 20 Mal das gleiche Datum gehabt, und bei 500 Zeilen 1000 mal das gleiche Datum, aber wir hätten nicht sagen können, ob die Datenbank-Engine jetzt einmal einen Systemcall "time()" ausgeführt und das Ergebnis gecached hat, oder ob sie wirklich 1000 mal den Systemaufruf ausgeführt hat. Letzteres wäre natürlich irgendwann einmal zu einem ganz bösen Performance-Boomerang geworden.