Fórum PROC DO FIREBIRD NO SQL SERVER #61200
18/03/2010
0
as
declare variable V_BAIRRO_A varchar(100);
declare variable V_BAIRRO_B varchar(100);
begin
for select nm_bairro from tb_bairro into :v_bairro_a
do
begin
for select nm_bairro from tb_bairro into :v_bairro_b
do
begin
insert into tb_trajeto (ds_trajeto) values (:v_bairro_a ||'/'||:v_bairro_b) ;
end end
END^ ESSA PROC AQUI FOI CRIADA NO FIREBIRD E FUNCIONA 100% AQUI NO SQL SERVER ACHO QUE É MAIS OU MENOS POR AQUI CREATE PROCEDURE PRC_ROTA
AS
DECLARE @BAIRRO_I VARCHAR (100)
declare @Bairro_f varchar (100) DECLARE CUR_ROTA_I CURSOR FOR SELECT NM_BAIRRO FROM TB_BAIRRO
declare CUR_ROTA_F CURSOR FOR SELECT NM_BAIRRO FROM TB_BAIRRO
--BEGIN TRANSACTION
OPEN CUR_ROTA_I FETCH NEXT FROM CUR_ROTA_I INTO @bairro_i
OPEN CUR_ROTA_F FETCH NEXT FROM CUR_ROTA_F INTO @BAIRRO_F
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO TB_ROTA (DS_ROTA) VALUES (@BAIRRO_I+'/'+ @BAIRRO_F)
INSERT INTO TB_ROTA (DS_ROTA) VALUES (@BAIRRO_F+'/'+ @BAIRRO_I)
FETCH NEXT FROM CUR_ROTA_I INTO @BAIRRO_I
FETCH NEXT FROM CUR_ROTA_I INTO @BAIRRO_F
END
BEGIN
SELECT * FROM TB_ROTA
END
CLOSE CUR_ROTA_I
DEALLOCATE CUR_ROTA_I
--COMMIT TRANSACTION
OBSERVACAO AQUI NO SQL ATE QUE TA FUNCIONANDO MAIS NAO ESTA FAZENDO O LOOP ,EXEMPLO SE EU TENHO 100 BAIRROS NA TABELA BAIRRO E QUERO CRIAR UMA DESCRICAO DE ROTA ENTRE TODOS EXEMPLO TB_BAIRRO COPACABANA IPANEMA LEBLON TB_ROTAS SERIA ESTE SERIA O RESUTADO DA PROCEDURE EU NAO PRECISARIA PASSAS NENHUM PARAMETRO ELA IRIA PEGAR O PRIMEIRO BAIRRO DA TABELA , ESCREVER NA TB_ROTAS 1º BAIRRO DA TABELA + '/+ PRIMERIO BAIRRO DA TABLE PRIMERIO BAIRRO DA TABELA + SEGUNDO BAIRRO DA TABELA E POR AI EM DIANTE. COPACABANA/COPACABANA COPACABANA/IPANEMA COPACABANA/LEBLON IPANEMA/COPACABANCA IPANEMA/IPANEMA IPANEMA/LEBLOM LEBLON/COPACANA LEBLON/IPANEMA LEBLON/LEBLON O EXEMPLO ACIMA EM FIREBIRD FAZ EXATAMENTE ISSO TA REDONDO
Carlos Faria
Curtir tópico
+ 0Posts
18/03/2010
Rodrigo Mourão
CREATE PROCEDURE PRC_ROTA
AS
DECLARE @BAIRRO_I VARCHAR (100)
DECLARE @BAIRRO_F VARCHAR (100)
DECLARE C_BAIRRO_I CURSOR FOR (SELECT NM_BAIRRO FROM TB_BAIRRO)
DECLARE C_BAIRRO_F CURSOR FOR (SELECT NM_BAIRRO FROM TB_BAIRRO)
OPEN C_BAIRRO_I
FETCH NEXT FROM C_BAIRRO_I INTO @BAIRRO_I
WHILE @@fetch_status = 0
BEGIN
OPEN C_BAIRRO_F
FETCH NEXT FROM C_BAIRRO_F INTO @BAIRRO_F
WHILE @@fetch_status = 0
BEGIN
INSERT INTO TB_ROTA (DS_ROTA) VALUES (@BAIRRO_I+'/'+ @BAIRRO_F)
FETCH NEXT FROM C_BAIRRO_F INTO @BAIRRO_F
END
CLOSE C_BAIRRO_F
DEALLOCATE C_BAIRRO_F
FETCH NEXT FROM C_BAIRRO_I INTO @BAIRRO_I
END
CLOSE C_BAIRRO_I
DEALLOCATE C_BAIRRO_I
Gostei + 0
18/03/2010
Carlos Faria
Gostei + 0
19/03/2010
Carlos Faria
Ja ouviu dizer é vivendo e esquecendo ,eu ja estava tao acostumado com o firebird que cara nem sei como nao vi isso.Essa rotina aqui ate minha vo que ta no tumulo faz ela .
Voce tem 121 bairros na tabela bairro e quer fazer a union entre todos eles. Pronto ja ta resolvido o problema
Union (no meu caso aqui que tenho 121 bairro elevado ao quadrado vai dar 14641 ) basta fazer um produto carteziano select a.nm_bairro +'/'+b.nm_bairro as Rotas
from tb_bairro a
cross join tb_bairro b Nem sei cara como nao pensei nisso , mas vamos fazer o seguinte agora eu quero fazer isso aqui tambem pelo cursor , eu fiquei umas 3 horas tentando essa rotina e nao consegui com o cursor e claro ne para inserir insert into tb_rota (ds_rota)values select a.nm_bairro +'/'+b.nm_bairro as Rotas
from tb_bairro a
cross join tb_bairro b
Mais nao se empolga nao , que eu quero fazer isso no cursor funcionar , so to postando isso pq eu e vc , nao percebemos o quanto era facil e tava o tempo todo na cara e agente procurou o caminho mais dificil creio eu o curor nao ta funcinando nao ta multiplicando os 121 * 121 ele ta fazendo 121*1 pegue todos os bairros e insere junto com o primeiro da tabela
Gostei + 0
19/03/2010
Rodrigo Mourão
Cara tem razão, mas e que quando o cliente abra o chamado a gente fica tao vidrado no problema que nem vemos outro solucao,
MAs esta funcionando, conseguiu faer isso no cursor??? Precisa de algo mais??
Att,
Gostei + 0
19/03/2010
Carlos Faria
Gostei + 0
23/03/2010
Rodrigo Mourão
Sintaticamente esta correto, vou verificar na pratica o que pode ocorrer.
Solicito a gentuileza que aguarde.
Att,
Gostei + 0
25/03/2010
Carlos Faria
Gostei + 0
25/03/2010
Rodrigo Mourão
Realmente o problema persiste porém não é minha especialidade banco de dados. A consultoria em Delphi não cobre assuntos de banco de dados mas como você e um cliente VIP (-: então me esforcei mas sem sucesso.
Estarei colocando o chamado como cancelado para nao consumir do seu pacote de serviços.
Att,
Gostei + 0
26/03/2010
Carlos Faria
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)