Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/02/2009, 05:14
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Importar Procedimiento Almacenado desde MS SQL 2000 a MySQL 5

Bueno. Hay varios detalles a tener en cuenta:
1. Deberías darte una vuelta por el manual de referencia para mayor claridad:
2. Las sentencias en MySQL terminan siempre con un punto y coma (";").
3. Para poder procesar un script de SP, debe cambiarse el delimitador momentaneamente, de modo que se cargue completo antes de ejecutarse.
4. Las variables de entrada se indican en el prototipo sin "@" e indicando si son de entrada (IN), salida (OUT) o entrada/salida (INOUT), ya que MySQL puede devolver valores en el SP.
5. Las variables locales se declaran igual, con DECLARE, pero cuando usas @ se transforman en globales y no requieren declaración, pero si reinicialización, puesto que conservan el valor entre ejecuciones.
6. Lo que intentas hacer se realiza con una sentencia preparada, la cual debe cargarse en este caso en una variable global.
7. Las sentencias preparadas deben destruirse cuando no se usan más, porque permanecen en memoria.

En general eso sería todo. La sintaxis más aproximada sería:
Código sql:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `sp_Listado_ENVIADOS` $$
  4. CREATE PROCEDURE `sp_Listado_ENVIADOS` (
  5.   IN a_cod_o_origen VARCHAR(10),
  6.   IN a_cod_tipo_doc VARCHAR(2),
  7.   IN a_cod_o_destino VARCHAR(10),
  8.   IN a_des_condicion VARCHAR(100))
  9.  
  10. BEGIN
  11.  
  12.   SET @SQL = 'SELECT Documentos.num_documento,
  13.    Documentos.des_fecha_documento,
  14.    tipo_documento.des_documento,
  15.    Organizacion.des_nombre_entidad as destino,
  16.    Documentos.des_Asunto,
  17.    Documentos.des_referencia,
  18.    Documentos.cod_organizacion as cod_o_origen,
  19.    Documentos.cod_personal as de,
  20.    Documentos.cod_ref_especifica,
  21.    Destino_documento.cod_organizacion as cod_o_destino,
  22.    Destino_documento.cod_personal as para ,
  23.    Destino_documento.des_fecha_recep ,
  24.    Destino_documento.des_fecha_deriva ,
  25.    Destino_documento.des_observaciones ,
  26.    Destino_documento.des_observacion2 ,
  27.    Destino_documento.des_observacion3 ,
  28.    Documentos.num_registro,
  29.    Destino_documento.num_recepcion,
  30.    Documentos.des_ubicacion,
  31.    CASE WHEN Documentos.num_plazo = 1 THEN Documentos.des_fecha_plazo ELSE null END AS des_fecha_plazo,
  32.    Documentos.num_envio,
  33.    Destino_documento.des_estado,
  34.    SUBSTRING(convert(char,Documentos.des_fecha_docume nto,101),1,10) as s_fecha_doc,
  35.    convert(char,Destino_documento.des_fecha_recep, 101) as s_fecha_recep ,
  36.    convert(char,Destino_documento.des_fecha_deriva, 101) as s_fecha_deriva ,
  37.    convert(char,Documentos.des_fecha_plazo,101) as s_fecha_plazo,
  38.    Documentos.num_plazo,
  39.    CASE WHEN Documentos.num_plazo = 1 THEN DATEDIFF(day, Documentos.des_fecha_plazo, getdate()) ELSE null END AS no_dias
  40.  FROM Documentos , Destino_documento, tipo_documento , Organizacion WITH (NOLOCK)
  41.  WHERE ( Documentos.num_registro = Destino_documento.num_registro ) and (documentos.cod_tipo_documento=tipo_documento.cod_ tipo_documento) and (Destino_documento.cod_organizacion=Organizacion.c od_organizacion) and ';
  42.  
  43.   SET @WHERE = CONCAT(' ( Documentos.cod_organizacion like \'', a_cod_o_origen ,'\') and ( Documentos.cod_tipo_documento like \'', a_cod_tipo_doc, '\') ', a_des_condicion;
  44.  
  45.   SET @SQL = CONCAT(@SQL, ' ( Destino_documento.cod_organizacion like \'', a_cod_o_destino, '\') and ', @WHERE, ' ORDER BY Documentos.cod_tipo_documento,Documentos.num_docum ento asc ');
  46.  
  47.   SET @SENTENCIA = CONCAT(@SSQL, @WWHERE);
  48.   PREPARE SQLGPS FROM @SENTENCIA;
  49.   EXECUTE SQLGPS;
  50.   DROP PREPARE SQLGPS;
  51. END $$
  52.  
  53. DELIMITER ;

Un tip final: Este script te dará error, posiblemente, porque contiene un "WITH (NOLOCK)", que no sé que hace en SQL Server y no me puse a averiguar cómo se migra... Me fijaré en otro momento.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)