PROC DO FIREBIRD NO SQL SERVER
OLA PESSOAL COMO EU FAÇO ISSO FUNCIONAR NO SQL SERVER
PROC NO FIREBIRD FUNCIONANDO PERFEITA
create or alter procedure PRC_CRIATRAJETOS
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
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
Curtidas 0
Respostas
Rodrigo Mourão
18/03/2010
Olá, segue:
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
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
Carlos Faria
18/03/2010
Ola Rodrigo a proc funcionou do mesmo jeito que a minha funcionou errao
ela pegou o bairo x e ligou com todos os outros so que na verdade se eu tenho 121 bairros na tb_bairro o result tem que ser 121 ao quadrado ou 121 * 121 = 14641
o insert dessa proc me trouxe 121 registros
tem que haver um loop onde exe
1º bairro
2º bairro
3º bairro
..................
................
1 /1
1/2
1/3
2/1
2/2
2/3
3/1
3/2
3/3
do jeito que ta a proc ela so retorna o exemplo em negrito
GOSTEI 0
Carlos Faria
18/03/2010
Ola Rodrigo
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
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
Rodrigo Mourão
18/03/2010
kkkkkkkkkkkkkkkkk
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,
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
Carlos Faria
18/03/2010
Sim preciso fazer funcionar no cursor tambem ,questao de honra agora , eu fiquei quase um dia todo e nao consegui fazer inserir via cursor
o exemplo que voce fez ele nao faz o produto carteziano , alias ele ate faz mais so do primerio registro sendo assim nao e um carteziano.
Depois de tanto sofrimento agora eu preciso fazer isso funcionar via cursor rs , fico aguardando
GOSTEI 0
Rodrigo Mourão
18/03/2010
Olá Carlos,
Sintaticamente esta correto, vou verificar na pratica o que pode ocorrer.
Solicito a gentuileza que aguarde.
Att,
Sintaticamente esta correto, vou verificar na pratica o que pode ocorrer.
Solicito a gentuileza que aguarde.
Att,
GOSTEI 0
Carlos Faria
18/03/2010
Ok quando tiver redondo vc posta ai , essa proc para mim agora e questao de honra !!
GOSTEI 0
Rodrigo Mourão
18/03/2010
Olá Carlos,
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,
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
Carlos Faria
18/03/2010
Não precisa cancelar nao , Pode fechar mesmo !
GOSTEI 0