Nein.

Ich vemute (wie schon gesagt) vielmehr, daß bei den Parametern nicht sauber zwischen String und Date unterschieden wurde, und dann kanns sein, daß im interaktiven SQL ein automatisches Casting die Situation rettet, jedoch beim CREATE der Function bzw. Procedure nicht, weil da als erstes nach dem "Unterprogramm" mit der exakt interpretierten Signatur gesucht wird. Diese Suche ist leider gar nicht smart, und verzeiht keine Fehler. Sie sagt dann einfach, Funktion nicht gefunden.

Der Unterschied zwischen Function und Procedure ist vor allem, daß die Procedure meistens was tut (Insert/update usw.), und daß sie über Parameter verfügt, während die Function meistens nichts tut, und meist nur über Input-Parameter und über ein Result, Result-Set der gar eine Result-Table verfügt (und keine Output-Parameter).

Eine Function wird innerhalb einer Formel (im SQL) verwendet.
Eine Prozedur wird innerhalb von SQL mit CALL aufgerufen.

PS: Achte auch darauf, bei Änderungen einer SQL-Function oder SQL-Procedure die vorhergehende Version mit DROP zu entfernen, sonst ergibt sich später ein Chaos. In der Source gebe ich immer zuerst den DROP-Befehl mit der Signatur der aktuellen Version an, ...