Lo que estás tratando de crear es una
sentencia preparada, y eso no se hace en MySQL con variables privadas de SP sino con variables de usuario, las cuales se usan sin declarar, pero se identifican por llevar un "@" como prefijo.
Es decir, el problema es que estás usando mucho T-SQL de MS SQL Server, en lugar de PL de MySQL. Lo que debes revisar es el manual de referencia de MySQL y ver cómo se hacen aquellas cosas que no pertenecen al estandar ANSI SQL, como es el caso de las funciones de conversión, stored sentences, y demás:
Por ejemplo:
-
No existe en MySQL el tipo de dato NVARCHAR, sino el VARCHAR.
- Los encadenamientos de texto se generan con
CONCAT(), separando por comas los valores a encadenar, porque no tiene un límite dado para los grupos de texto.
- Las
conversiones entre un tipo de dato y oro
se hacen con CAST() y no con CONVERT porque el segundo de usa para conversiones de base y no de tipo. Algunas conversiones se las puede hacer implícitamente, como es el caso de las te cadena.
- IF... THEN/ ELSE/ END IF,
se usa completo y no es una función. Para eso existe la función
IF(condicion, true out, false out).
- Para asignar un valor de un SELECT a una variable
o usas SET o usas INTO
-
Hay funciones que no existen en MySQL, porque son propias de otro DBMS, como ROW_NUMBER() y OVER(ORDER BY value). Si puedes explicar lo que buscas, se puede resolver el problema.
Esto está un poco más cerca,
pero aún no se puede ejecutar:
Código MySQL:
Ver originalDELIMITER $$
SET startIndex
= IF(startIndex
< 1, 1, startIndex
); SET pageSize
= IF(pageSize
< 1, 1, pageSize
); SET upperBound
= startIndex
+ pageSize
; SET @sqlStatement
=concat('SELECT E.id_evento, E.titulo, E.fecha_evento, E.lugar ', 'FROM (SELECT ROW_NUMBER() OVER(ORDER BY ', sortBy, ') AS rowNumber ',
'FROM Employee) AS E WHERE rowNumber >= ', startIndex,
' AND rowNumber < ', upperBound)
exec (sqlStatement);
DELIMITER ;
Para completarlo, hace falta saber qué es lo que quieres obtener con esto:
para ver cómo obtenerlo en MySQl.