Power Builder - Apoyo Creando DW

   
Vista:

Apoyo Creando DW

Publicado por Frank Michael (50 intervenciones) el 02/06/2016 18:23:45
Estimado buenas, aquí una vez mas acudiendo a su apoyo, resulta que tengo este procedimiento almacenado:

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
CREATE PROCEDURE [dbo].[USP_RPT_MOV_MES2] (@AS_EMPRESA CHAR (3), @AS_PERIODO CHAR (8)) AS
 
BEGIN
 
DECLARE     @codigo     CHAR(3),
            @texto1     VARCHAR(50),
            @texto2     VARCHAR(50),
            @cadena     VARCHAR(8000),
            @cont       INT,
            @TMP_FICHA    VARCHAR(20),
            @TMP_MOVIMIENTO VARCHAR(20),
            @TMP_VALOR       VARCHAR(24),
            @TMP_MOV_CAB    VARCHAR(50),
			@tmp_ano_mes	varchar(7)
 
 
CREATE TABLE #TMP_REPORT ( TMP_FICHA    VARCHAR(20)     NULL,
                           TMP_NOMBRE   VARCHAR(100)    NULL,
                           TMP_APE_PAT  VARCHAR(100)    NULL,
                           TMP_APE_MAT  VARCHAR(100)    NULL
                          )
 
CREATE TABLE #TMP_CAB    ( TMP_NUM_COL     CHAR (3)     NULL,
                           TMP_NOM_CAM     VARCHAR(50)  NULL,
                           TMP_MOVIMIE     VARCHAR(50)  NULL
                          )
 
CREATE TABLE #TMP_MOVIMIENTOS ( TMP_FICHA    VARCHAR(20)     NULL,
                           TMP_NOMBRE   VARCHAR(100)    NULL,
                           TMP_APE_PAT  VARCHAR(100)    NULL,
                           TMP_APE_MAT  VARCHAR(100)    NULL,
                           TMP_MOVIMIENTO VARCHAR(20) NULL,
                           TMP_VALOR       VARCHAR(24),
                           TMP_MOV_CAB     VARCHAR(50)
                            )
 
INSERT INTO #TMP_CAB
 
SELECT  rank() OVER (ORDER BY CODIGO, TEXTO1, TEXTO2 ),
        TEXTO1,
        TEXTO2
  FROM  FLEXLINE.GEN_TABCOD
 WHERE  EMPRESA = @AS_EMPRESA
   AND  TIPO = 'CFG.INFORMESLEGALES'
   AND  CODIGO LIKE 'Planilla de Sue.%'
   AND  SUBSTRING ( CODIGO ,18, 3 ) <= '100'
   AND  ISNULL(TEXTO1, 'X') <> 'X'
   AND  TEXTO1 <> ''
GROUP BY CODIGO, TEXTO1, TEXTO2
 
 
Set @tmp_ano_mes = Substring(@AS_PERIODO,1,6)+ '%'
 
INSERT INTO #TMP_MOVIMIENTOS
SELECT A.FICHA, B.NOMBRE, B.APELLIDO_PATERNO, B.APELLIDO_MATERNO, A.MOVIMIENTO, A.VALOR, C.TMP_NOM_CAM
FROM FLEXLINE.PER_DET_LIQ A left join #TMP_CAB C on A.MOVIMIENTO	= C.TMP_MOVIMIE, FLEXLINE.PER_TRABAJADOR B--, #TMP_CAB C
WHERE A.EMPRESA		= '001'
AND A.PERIODO		LIKE '201604%'
AND A.ficha			= B.ficha
AND A.EMPRESA		= B.EMPRESA
 
 
INSERT INTO #TMP_REPORT
SELECT TMP_FICHA,
       TMP_NOMBRE,
       TMP_APE_PAT,
       TMP_APE_MAT
 FROM  #TMP_MOVIMIENTOS
 GROUP BY  TMP_FICHA, TMP_NOMBRE, TMP_APE_PAT, TMP_APE_MAT
 
--agregando campos faltantes
set @cadena = 'alter table #TMP_REPORT ADD '
set @cont = 0
declare cur_campo cursor scroll for
        select TMP_NUM_COL,TMP_NOM_CAM,TMP_MOVIMIE
        from #TMP_CAB
 
open cur_campo
fetch first from cur_campo into @codigo, @texto1, @texto2
 
while @@fetch_status = 0
    begin
 
    set @cont = @cont + 1
    if @cont = 1
        begin
        set @cadena = @cadena+'['+@texto1+'] varchar(24)'
        end
    else
        begin
        set @cadena = @cadena+',['+@texto1+'] varchar(24)'
        end
    fetch next from cur_campo into @codigo, @texto1, @texto2
    end
close cur_campo
deallocate cur_campo
exec(@cadena)
 
 Declare CUR_MOV Cursor FORWARD_ONLY For
 
 SELECT TMP_FICHA,
        TMP_MOVIMIENTO,
        TMP_VALOR,
        TMP_MOV_CAB
  FROM  #TMP_MOVIMIENTOS
 
Open CUR_MOV
Fetch CUR_MOV Into  @TMP_FICHA,
                    @TMP_MOVIMIENTO,
                    @TMP_VALOR,
                    @TMP_MOV_CAB
 
While (@@FETCH_STATUS = 0 )
Begin
 
 
set @cadena = 'UPDATE #TMP_REPORT SET [' + @TMP_MOV_CAB + ']="' + ISNULL(@TMP_VALOR,'') + '" WHERE TMP_FICHA = "' + @TMP_FICHA + '"'
EXEC (@cadena)
 
 
UPDATE #TMP_REPORT
SET @TMP_MOV_CAB = @TMP_VALOR
WHERE TMP_FICHA = @TMP_FICHA
 
 
Fetch CUR_MOV Into  @TMP_FICHA,
                    @TMP_MOVIMIENTO,
                    @TMP_VALOR,
                    @TMP_MOV_CAB
End
Close CUR_MOV
Deallocate CUR_MOV
 
 
Set @tmp_ano_mes = Substring(@AS_PERIODO,1,6)
 
SELECT @tmp_ano_mes AS 'PERIODO', * FROM #TMP_REPORT
 
DROP TABLE #TMP_REPORT
 
 
END


De ese procedimiento quiero crear un DW, pero me salta el siguiente error:


---------------------------
DataWindow Wizard
---------------------------
Cannot create DataWindow.



'Index #0 Message: Sintaxis incorrecta cerca de 'ADD'. NativeError: 102 Source: Microsoft OLE DB Provider for SQL Server SQLState: 42000



1 execute dbo.USP_RPT_MOV_MES2;1 @AS_EMPRESA = :AS_EMPRESA, @AS_PERIODO = :AS_PERIODO'
---------------------------
Aceptar
---------------------------


Quisiera saber si ese inconveniente tiene solución o quizas deba pensar otra forma de hacer mi procedimiento.

Atento a sus comentarios
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

Apoyo Creando DW

Publicado por Jorge (16 intervenciones) el 03/06/2016 17:39:12
Hola,

El mensaje es al crear el DW con fuente un SP.

Recomendaciones:

1. En el result de SP especifica de manera explícita las columnas. SELECT COL1, COL2, COL3 FROM TABLE

2. Si el error persiste, solo para crear el DW comenta todas las operaciones (insert, update, fech, etc.) del SP solo déjalo el result para que te cree el DW de manera limplia. una vez definido el DW ya puedes descomentar tu SP. El problema es solo al momento de crear el DW.

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

Apoyo Creando DW

Publicado por Leopoldo Taylhardat (690 intervenciones) el 04/06/2016 21:30:18
Saludos...

En la opción "MORE" (por lo menos en la versión que trabajo) o donde defines el execute del procedure...

CALL "DBA"."SP_EJECUTAR"();

ASÍ ME FUNCIONA A MÍ...

espero que te sirva..
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