Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/08/2010, 15:16
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error al crear Stored Procedure

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 original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE `galiciaparty`.`spGetAllEventos` (IN startIndex INT, IN pageSize INT, IN sortBy varchar(30), OUT totalEventos INT)
  4.     DECLARE upperBound INT;
  5.     SET startIndex  = IF(startIndex  < 1, 1, startIndex);
  6.     SET pageSize = IF(pageSize < 1, 1, pageSize);
  7.     SET upperBound = startIndex + pageSize;
  8.     SET totalEventos=(SELECT Count(*) FROM gp_eventos_prin);
  9.     SET @sqlStatement =concat('SELECT E.id_evento, E.titulo, E.fecha_evento, E.lugar ',
  10.                        'FROM (SELECT  ROW_NUMBER() OVER(ORDER BY ', sortBy, ') AS rowNumber ',
  11.                        'FROM    Employee) AS E  WHERE  rowNumber >= ', startIndex,
  12.                        ' AND rowNumber <  ', upperBound)
  13.   exec (sqlStatement);
  14. END$$
  15.  
  16. DELIMITER ;

Para completarlo, hace falta saber qué es lo que quieres obtener con esto:
Código MySQL:
Ver original
  1. SELECT  ROW_NUMBER() OVER(ORDER BY ' + @sortBy + ') AS rowNumber, * FROM    Employee
para ver cómo obtenerlo en MySQl.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)