-
Notifications
You must be signed in to change notification settings - Fork 1
/
Atividade_cursores.sql
148 lines (124 loc) · 4.29 KB
/
Atividade_cursores.sql
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
143
144
145
146
147
148
CREATE DATABASE Atividade_cursores
GO
USE Atividade_cursores
--Exercicio tirado de situação real.
/* A empresa tinha duas tabelas: Envio e Endereço, como listada abaixo.
No atributo NR_LINHA_ARQUIV, há um número que referencia a
linha de incidência do endereço na tabela endereço.
Por exemplo:
ENVIO:
|CPF |NR_LINHA_ARQUIV |...
|11111111111 |1 |
|11111111111 |2 |
ENDEREÇO:
|CPF |CEP |PORTA |ENDEREÇO |COMPLEMENTO |BAIRRO |CIDADE |UF |
|11111111111|11111111 |10 |Rua A | |Pq A |São Paulo |SP |
|11111111111|22222222 |125 |Rua B | |Pq B |São Paulo |SP |
Portanto, o NR_LINHA_ARQUIV (1) referencia o registro do endereço da Rua A e o NR_LINHA_ARQUIV (2)
referencia o endereço da Rua B.
Como se trata de uma estrutura completamente mal feita, o DBA solicitou
que se colcasse as colunas NM_ENDERECO, NR_ENDERECO, NM_COMPLEMENTO, NM_BAIRRO, NR_CEP,
NM_CIDADE, NM_UF varchar(2) e movesse os dados da tabela endereço para a tabela envio.
Fazer uma PROCEDURE, com cursor, que resolva esse problema
*/
create table envio (
CPF varchar(20),
NR_LINHA_ARQUIV int,
CD_FILIAL int,
DT_ENVIO datetime,
NR_DDD int,
NR_TELEFONE varchar(10),
NR_RAMAL varchar(10),
DT_PROCESSAMENT datetime,
NM_ENDERECO varchar(200),
NR_ENDERECO int,
NM_COMPLEMENTO varchar(50),
NM_BAIRRO varchar(100),
NR_CEP varchar(10),
NM_CIDADE varchar(100),
NM_UF varchar(2),
)
create table endereço(
CPF varchar(20),
CEP varchar(10),
PORTA int,
ENDEREÇO varchar(200),
COMPLEMENTO varchar(100),
BAIRRO varchar(100),
CIDADE varchar(100),
UF Varchar(2)
)
/*
Por se tratar de dados confidenciais, a procedure abaixo foi feita para se criar
dados ficticios nas tabelas
*/
create procedure sp_insereenvio
as
declare @cpf as int
declare @cont1 as int
declare @cont2 as int
declare @conttotal as int
set @cpf = 11111
set @cont1 = 1
set @cont2 = 1
set @conttotal = 1
while @cont1 <= @cont2 and @cont2 < = 100
begin
insert into envio (CPF, NR_LINHA_ARQUIV, DT_ENVIO)
values (cast(@cpf as varchar(20)), @cont1,GETDATE())
insert into endereço (CPF,PORTA,ENDEREÇO)
values (@cpf,@conttotal,CAST(@cont2 as varchar(3))+'Rua '+CAST(@conttotal as varchar(5)))
set @cont1 = @cont1 + 1
set @conttotal = @conttotal + 1
if @cont1 > = @cont2
begin
set @cont1 = 1
set @cont2 = @cont2 + 1
set @cpf = @cpf + 1
end
end
exec sp_insereenvio
select * from envio order by CPF,NR_LINHA_ARQUIV asc
select * from endereço order by CPF asc
CREATE PROCEDURE sp_transfere_Dados
AS
BEGIN
DECLARE @END_CPF VARCHAR(20),
@ENV_CPF VARCHAR(20),
@NR_LINHA_ARQUIV INT,
@CD_FILIAL INT,
@DT_ENVIO DATETIME,
@NR_DDD INT,
@NR_TELEFONE VARCHAR(10),
@NR_RAMAL VARCHAR(10),
@DT_PROCESSAMENT VARCHAR(20),
@NM_ENDERECO varchar(200),
@NR_ENDERECO int,
@NM_COMPLEMENTO varchar(50),
@NM_BAIRRO varchar(100),
@NR_CEP varchar(10),
@NM_CIDADE varchar(100),
@NM_UF varchar(2)
DECLARE cursor_enviar CURSOR FOR
SELECT CPF,NR_LINHA_ARQUIV,CD_FILIAL,DT_ENVIO,NR_DDD,NR_TELEFONE,@NR_RAMAL,@DT_PROCESSAMENT FROM envio
OPEN cursor_enviar
DECLARE cursor_endereco CURSOR FOR
SELECT CPF,CEP,ENDEREÇO,PORTA, COMPLEMENTO,BAIRRO,CIDADE,UF FROM endereço
OPEN cursor_endereco
FETCH NEXT FROM cursor_enviar INTO
@ENV_CPF,@NR_LINHA_ARQUIV,@CD_FILIAL,@DT_ENVIO,@NR_DDD,@NR_TELEFONE,@NR_RAMAL,@DT_PROCESSAMENT
FETCH NEXT FROM cursor_endereco INTO
@END_CPF,@NR_CEP,@NM_ENDERECO,@NR_ENDERECO, @NM_COMPLEMENTO,@NM_BAIRRO,@NM_CIDADE,@NM_UF
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE envio SET NR_CEP = @NR_CEP,NM_ENDERECO = @NM_ENDERECO, NR_ENDERECO = @NR_ENDERECO, NM_COMPLEMENTO = @NM_COMPLEMENTO, NM_BAIRRO = @NM_BAIRRO, NM_CIDADE = @NM_CIDADE, NM_UF = @NM_UF WHERE CPF = @END_CPF AND CPF = @ENV_CPF AND NR_LINHA_ARQUIV = @NR_LINHA_ARQUIV
FETCH NEXT FROM cursor_enviar INTO
@ENV_CPF,@NR_LINHA_ARQUIV,@CD_FILIAL,@DT_ENVIO,@NR_DDD,@NR_TELEFONE,@NR_RAMAL,@DT_PROCESSAMENT
FETCH NEXT FROM cursor_endereco INTO
@END_CPF,@NR_CEP,@NM_ENDERECO,@NR_ENDERECO, @NM_COMPLEMENTO,@NM_BAIRRO,@NM_CIDADE,@NM_UF
END
CLOSE cursor_enviar
DEALLOCATE cursor_enviar
CLOSE cursor_endereco
DEALLOCATE cursor_endereco
END