Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Importar Procedimiento Almacenado desde MS SQL 2000 a MySQL 5

Estas en el tema de Importar Procedimiento Almacenado desde MS SQL 2000 a MySQL 5 en el foro de Mysql en Foros del Web. Buenas colegas foreros, siendo este mi primer post, quisiera que me puedan ayudar, mi problema es el sgte debo migrar una BD de SQL 2000 ...
  #1 (permalink)  
Antiguo 27/02/2009, 20:58
 
Fecha de Ingreso: octubre-2008
Mensajes: 7
Antigüedad: 15 años, 6 meses
Puntos: 0
Importar Procedimiento Almacenado desde MS SQL 2000 a MySQL 5

Buenas colegas foreros, siendo este mi primer post, quisiera que me puedan ayudar, mi problema es el sgte debo migrar una BD de SQL 2000 a MySQL 5 y me di la sorpresa que los procedimientos almacenados no los puedo exportar de forma automatica.

Para logra exporta la BD use el SDLways peor como repito los procedimientos almacenados no se pueden exportar. por ejemplo este es un Procedimiento Almacenado basico que no puede exportar.
------------------------------------------------------------------------------------------------------------------------------------------
Codigo SQL
------------------------------------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[sp_Listado_ENVIADOS]
@a_cod_o_origen VARCHAR(10),
@a_cod_tipo_doc VARCHAR(2),
@a_cod_o_destino VARCHAR(10),
@a_des_condicion VARCHAR(100)

AS

DECLARE @SQL VARCHAR(4000)
DECLARE @WHERE VARCHAR(1000)

SET @SQL = ' SELECT Documentos.num_documento,
Documentos.des_fecha_documento,
tipo_documento.des_documento,
Organizacion.des_nombre_entidad as destino,
Documentos.des_Asunto,
Documentos.des_referencia,
Documentos.cod_organizacion as cod_o_origen,
Documentos.cod_personal as de,
Documentos.cod_ref_especifica,
Destino_documento.cod_organizacion as cod_o_destino,
Destino_documento.cod_personal as para ,
Destino_documento.des_fecha_recep ,
Destino_documento.des_fecha_deriva ,
Destino_documento.des_observaciones ,
Destino_documento.des_observacion2 ,
Destino_documento.des_observacion3 ,
Documentos.num_registro,
Destino_documento.num_recepcion,
Documentos.des_ubicacion,
CASE WHEN Documentos.num_plazo = 1 THEN Documentos.des_fecha_plazo ELSE null END AS des_fecha_plazo,
Documentos.num_envio,
Destino_documento.des_estado,
SUBSTRING(convert(char,Documentos.des_fecha_docume nto,101),1,10) as s_fecha_doc,
convert(char,Destino_documento.des_fecha_recep, 101) as s_fecha_recep ,
convert(char,Destino_documento.des_fecha_deriva, 101) as s_fecha_deriva ,
convert(char,Documentos.des_fecha_plazo,101) as s_fecha_plazo,
Documentos.num_plazo,
CASE WHEN Documentos.num_plazo = 1 THEN DATEDIFF(day, Documentos.des_fecha_plazo, getdate()) ELSE null END AS no_dias
FROM Documentos , Destino_documento, tipo_documento , Organizacion WITH (NOLOCK)
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 '


SET @WHERE = ' ( Documentos.cod_organizacion like '''+@a_cod_o_origen +''') and ( Documentos.cod_tipo_documento like '''+@a_cod_tipo_doc +''') ' + @a_des_condicion

SET @SQL = @SQL+' ( Destino_documento.cod_organizacion like '''+@a_cod_o_destino+''') and ' + @WHERE+' ORDER BY Documentos.cod_tipo_documento,Documentos.num_docum ento asc '
EXEC(@SQL)
------------------------------------------------------------------------------------------------------------------------------------------

Espero puedaa ayudarme o al menos orientarme con este tema

Última edición por josepa3; 27/02/2009 a las 21:00 Razón: No podia poner el Codigo SQL
  #2 (permalink)  
Antiguo 28/02/2009, 05:14
Avatar de 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)
  #3 (permalink)  
Antiguo 28/02/2009, 18:45
 
Fecha de Ingreso: octubre-2008
Mensajes: 7
Antigüedad: 15 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Importar Procedimiento Almacenado desde MS SQL 2000 a MySQL 5

Gracias por tu respuesta y el tiempo que te tomaste para darmela y abuzandod e tu confianza ( y al de los demas foreros ) existe alguna herramienta que me pueda automatizar la migracion de los procedures ya que mi BD tiene muchos procedures ( unos 300 +/- ) y hacerlos a manos seria una gran labor.

Por otro lado de no existir tal herramienta, alguien tendra algun documento con las equivalencias entre las funciones de MS SQL y MySQL

Gracias a todos por su tiempo...

ATTE. J
  #4 (permalink)  
Antiguo 28/02/2009, 18:57
Avatar de 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

Existe en la página oficial una herramienta que puedes usar y que forma parte de las MySQL GUI Tools .
Estas son tres herramientas:
1. MySQL Administrator
2. MySQL Query Browser
3. MySQL Migration Toolkit

Obviamente lo que te interesa es el MySQL Migration Toolkit, pero de todos modos las tres son un sólo paquete.
Te recomiendo especialmente e uso del MySQL Query Browser, que resulta muy útil en la etapa de desarrollo, sea para construir las bases como para probar scripts, tablas, relaciones, etc. Si bien lo vas a notar ago tosco y rígido, es muy útil y tiene la ventaja de ser nativo.
Respecto al MySQL Migration Toolkit, esta puede migrar desde MS SQL Server, Access, Sybase, MaxDB y Oracle.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/03/2009, 10:14
 
Fecha de Ingreso: octubre-2008
Mensajes: 7
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Importar Procedimiento Almacenado desde MS SQL 2000 a MySQL 5

Muchisimas gracias a todas las persona que me colaboraron, y bueno aqui estoy sin mas ni menos que con una solucion ( no la que queria pero se aproximo bastante ) , bueno al grano....

Para convertir los procedimientos use 2 Programas muy bueno e interesanters ( pero en su version TRIAL ).

1. SQLways 3.9 => Este pra migrar los Procedimientos almacenados
2. SQLyog => Para migrar las tablas ya que el anterior en su version trial tien una limitacion.


Bueno peor no todo ue de maravilla tube que hacer modificaciones propias de la BD (Algunos campos y cosas similares) y probar muy bien los procedimientos almacenados ya que los asistentes no son lo maximo peor si ayudan aligerar la labor tediosa de migrarlos a mano.

ATTE J.
Alguna duda a: josepazaliaga[at]hotmail[dot]com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:53.