El problema es que estás tratando de usar un código para SQL Server y trasladarlo a MySQL sin tener en cuenta que los lenguajes procedurales no son compatibles entre diferentes DBMS.
No sólo sucede a nivel de ciertas funciones. Los operadores no se escriben igual en muchos casos, por lo que en realidad hay varios y problemáticos defectos en el script, si pretendes usarlo en MySQL.
Algunos casos:
1) Lo que tienes aquí es un STORED FUNCTION y no un STRORED PROCEDURE. No es lo mismo; una de las diferencias substanciales es que MySQL no admite salidas de resultados fuera del RETURN, por lo que el uso de SELECT como medio de asignación de datos es incorrecto. Otra de sus diferencias es que se debe declara, antes del BEGIN, READS SQL DATA, si vas a acceder a tablas, por ejemplo.
2) El uso de "=" para asignar un valor a una variable o un campo, sólo se produce con SET, y no con SELECT.
Para que se entienda bien:
no es una asignación, sino una comparación lógica (el valor de XlcCadena con la cadena 'OCHENTA').
Así, esto:
Código MySQL:
Ver original WHEN XlnUnidades
= 1 AND XlnTerna
= 1 THEN 'UNO ' + XlcCadena
WHEN XlnUnidades
= 1 AND XlnTerna
<> 1 THEN 'UN ' + XlcCadena
WHEN XlnUnidades
= 2 THEN 'DOS ' + XlcCadena
WHEN XlnUnidades
= 3 THEN 'TRES ' + XlcCadena
WHEN XlnUnidades
= 4 THEN 'CUATRO ' + XlcCadena
WHEN XlnUnidades
= 5 THEN 'CINCO ' + XlcCadena
WHEN XlnUnidades
= 6 THEN 'SEIS ' + XlcCadena
WHEN XlnUnidades
= 7 THEN 'SIETE ' + XlcCadena
WHEN XlnUnidades
= 8 THEN 'OCHO ' + XlcCadena
WHEN XlnUnidades
= 9 THEN 'NUEVE ' + XlcCadena
Es en realidad una comparación que intentará devolver un dato (TRUE o FALSE) por fuera del RETURN.
3) Esta sentencia está mal escrita:
En MySQL el operador "+" no está definido para crear cadenas de texto, sino sólo para operar números, por lo que dará error (es el error de la línea 115).
Para crear cadenas sobre la base de segmentos distintos, MySQL tiene una función: CONCAT():
Por último, ten cuidado con el Navicat. Suele agregar espacios entre el nombre de una función y su primer paréntesis, cosa que MySQL no admite, generando un error de sintaxis difícil de detectar.
Es decir, te transforma esto:
en esto:
Lo más difícil de detectar de este problema es que sólo se produce en tiempo de ejecución, y no al generar scripts, por lo que sólo recibes un mensaje de error que nunca puedes determinar porque todo parece estar bien...