SQL Server - Pasar un query de Oracle a SQL

   
Vista:
Imágen de perfil de Jhoxan

Pasar un query de Oracle a SQL

Publicado por Jhoxan (3 intervenciones) el 02/11/2015 15:52:45
Buenos dias

Tengo un problema en una migracion de una BD. Ya que actualmente esta en Oracle y debo llevar los objetos a SQL. Y tengo un Store Procedure con una sentencia la cual no se como se llevarla a SQL.

Agradeceria mucho su apoyo al respecto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
DECLARE C_cont CURSOR  for
           SELECT Cod_Empresa, Cod_Centro_Costo, Fe_Comp, Tipo_Comp,
                  Nu_Comp, Sec_comp, Cod_Cuenta, Tot_Cuenta, Ti_mov,
                  Mont_mov, Ti_oper, REF, Fe_Vig, Cod_Centro_Costo_Dest,
                  Cod_Centro_Costo_Dest_Mat, Con_int, Det_Mov,
                  Base_Reten, Porcentaje_refe, Base_Divisa,  Factor_Cambio2,
                  Factor_Cambio1, Cod_User, Cod_Serv, Codigo_Fiscal,
                  Subcodigo_Fiscal, In_Selec_aux, In_Es_Orig,
                  In_manual, In_Error, In_Validado, Tipo_Auxiliar,
                  Cod_Auxiliar,Cto_costo
           FROM   FPV_MOVIMIENTO_AUTOMATICO
           WHERE  Cod_Empresa      = @w_cod_empresa
           AND    Cod_centro_costo = @w_cco
           AND    fe_comp          = @w_fecha
           AND    tipo_comp        = @w_doc
           AND    nu_comp          = @w_ncomp
           AND    sec_comp         = @w_x
           AND    id_session       = @i_id_session
 
        BEGIN
 
           FOR X3 IN C_cont LOOP
               --
		       -- Normalizacion del Centro de Costo a 8 digitos, aplica solo a los Cuentas Contables
			   -- que empienzan en '4' y '5'
			   --
			   IF substring(x3.Cod_Cuenta,1,1) IN ('4','5') THEN
			      BEGIN
				     SELECT DECODE(LENGTH(x3.Cto_costo),'5',LPAD(x3.Cto_costo,6,'0') || '00','6',x3.Cto_costo || '00','7',LPAD(x3.Cto_costo,8,'0'),x3.Cto_costo)
					   INTO x3.Cto_costo
					   FROM dual
				  END;
			   ELSE
			      select x3.Cto_costo = 0
			   END IF
			   --
			   --
               BEGIN
                  INSERT INTO Nmm027u
                 (Cod_Empresa,        Cod_Centro_Costo,        Fe_Comp,
                  Tipo_Comp,          Nu_Comp,                 Sec_comp,
                  Cod_Cuenta,         Tot_Cuenta,              Ti_mov,
                  Mont_mov,           Ti_oper,                 REF,
                  Fe_Vig,             Cod_Centro_Costo_Dest,   Cod_Centro_Costo_Dest_Mat,
                  Cod_nit,            Det_Mov,                 Base_Reten,
                  Porcentaje_rete,    Base_Divisa,             Factor_Cambio2,
                  Factor_Cambio1,     Cod_User,                Cod_Serv,
                  Codigo_Fiscal,      Subcodigo_Fiscal,        In_Selec_aux,
                  In_Es_Orig,         In_manual,               In_Error,
                  In_Validado,        Tipo_Auxiliar,           Cod_Auxiliar, Cto_Costo)
                  VALUES(x3.Cod_Empresa,            x3.Cod_Centro_Costo,      x3.Fe_Comp,
                         x3.Tipo_Comp,              x3.Nu_Comp,               x3.Sec_comp,
                         x3.Cod_Cuenta,             x3.Tot_Cuenta,            x3.Ti_mov,
                         x3.Mont_mov,               x3.Ti_oper,               x3.REF,
                         x3.Fe_Vig,                 x3.Cod_Centro_Costo_Dest, x3.Cod_Centro_Costo_Dest_Mat,
                         x3.Cod_nit,                x3.Det_Mov,               x3.Base_Reten,
                         x3.Porcentaje_refe,        x3.Base_Divisa,           x3.Factor_Cambio2,
                         x3.Factor_Cambio1,         x3.Cod_User,              x3.Cod_Serv,
                         x3.Codigo_Fiscal,          x3.Subcodigo_Fiscal,      x3.In_Selec_aux,
                         x3.In_Es_Orig,             x3.In_manual,             x3.In_Error,
                         x3.In_Validado,            x3.Tipo_Auxiliar,         x3.Cod_Auxiliar, x3.Cto_costo)
                  EXCEPTION WHEN OTHERS THEN
                     INSERT INTO FPV_ERRORES_CONTABLES
                     VALUES(@i_compania, @i_id_session, @w_cco,       @w_fecha,
                            w_doc,      X3.Nu_Comp,   X3.Sec_comp, X3.Cod_Cuenta,
                            x3.Ti_mov,  X3.Mont_mov,  X3.Det_Mov);
 
 
                     select @w_error = 1
                     EXIT
               END
           END LOOP
        END
 
        IF @w_error = 1 THEN
           EXIT
        END IF;
 
   END   LOOP
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Pasar un query de Oracle a SQL

Publicado por Rafael (88 intervenciones) el 03/11/2015 08:30:02
Y cual es la sentencia que no sabes pasar???

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhoxan

Pasar un query de Oracle a SQL

Publicado por Jhoxan (3 intervenciones) el 03/11/2015 22:27:51
esta seccion....

ya que el C_cont es un cursor y aqui lo unen con un bucle de oracle con el For.

adicionalmente esta un decode, con concatenacion el cual no se como ordenarlo correctamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
FOR X3 IN C_cont LOOP
 
	--
 
	-- Normalizacion del Centro de Costo a 8 digitos, aplica solo a los Cuentas Contables
 
	-- que empienzan en '4' y '5'
 
	--
 
	IF substring(x3.Cod_Cuenta,1,1) IN ('4','5') THEN
 
		BEGIN
 
			SELECT DECODE(LENGTH(x3.Cto_costo),'5',LPAD(x3.Cto_costo,6,'0') || '00','6',x3.Cto_costo || '00','7',LPAD(x3.Cto_costo,8,'0'),x3.Cto_costo)
 
			INTO x3.Cto_costo
 
			FROM dual
 
		END;
 
	ELSE
 
		select x3.Cto_costo = 0
 
	END IF
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pasar un query de Oracle a SQL

Publicado por Rafael (88 intervenciones) el 04/11/2015 12:30:50
Bueno a ver aqui tienes un ejemplo de como crear y abrir un cursor en SQL
1
2
3
4
5
6
7
8
9
10
11
DECLARE @Description AS nvarchar(400)
DECLARE ProdInfo CURSOR FOR SELECT [Description] FROM Production.ProductDescription
OPEN ProdInfo
    FETCH NEXT FROM ProdInfo INTO @Description
    WHILE @@fetch_status = 0
    BEGIN
        PRINT @Description
        FETCH NEXT FROM ProdInfo INTO @Description
    END
CLOSE ProdInfo
DEALLOCATE ProdInfo

Luego entonces en lugar del FOR
Tienes que ir iterando y atrapando cada columna del cursor en variables...

En cuanto al DECODE es como un CASE
evalua el primer valor
si es igual al segundo parametro aplica el tercero
si no hay quinto y si cuarto parametro entonces si no fue igual al segundo aplica el cuarto...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar