procedure do sqlserver para o firebird
-- insere debito para todos os ASSOCIADOS ATIVOS
PESSOAL ESTOU TRABALHANDO EM UM PROJETO DELPHI 2010, DBEXPRESS E AGORA SIM FIREBIRD
ESSA PROCEDURE ABAIXO E DO SQL SERVER , TENHO UM PROJETO PARECIDO LA ,
COMO FAÇO ISSO AQUI NO FIREBIRD ?
-- Carlos Regis e Rodrigo Carreiro Mourao 19/05/2009 21:25
CREATE PROCEDURE DBO.PROC_LANCA_DEBITO_Cliente(
@PBitCredito BIT,
@PDecMovimento DECIMAL(12,2),
@PSntTipoMovimento SMALLINT,
@PIndUsuario INT
) AS
DECLARE CURCLIENTE
CURSOR FOR
SELECT ID_CLIENTE FROM TB_ASSOCIADOS where dt_saida is null and id_categoria_cliente not in (1,3)
DECLARE @idCliente INT
BEGIN TRANSACTION
OPEN CURCLIENTE
FETCH NEXT FROM CURCLIENTE INTO @IDCLIENTE
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO tb_ASSOCIADOS (ID_CLIENTE,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (@idCliente,@PBitCredito,@PDecMovimento,@PSntTipoMovimento,@PIndUsuario )
FETCH NEXT FROM CURCLIENTE INTO @IDCLENTE
END
CLOSE CURCLIENTE
DEALLOCATE CURCLIENTE
COMMIT TRANSACTION
CREATE PROCEDURE DBO.PROC_LANCA_DEBITO_Cliente(
@PBitCredito BIT,
@PDecMovimento DECIMAL(12,2),
@PSntTipoMovimento SMALLINT,
@PIndUsuario INT
) AS
DECLARE CURCLIENTE
CURSOR FOR
SELECT ID_CLIENTE FROM TB_ASSOCIADOS where dt_saida is null and id_categoria_cliente not in (1,3)
DECLARE @idCliente INT
BEGIN TRANSACTION
OPEN CURCLIENTE
FETCH NEXT FROM CURCLIENTE INTO @IDCLIENTE
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO tb_ASSOCIADOS (ID_CLIENTE,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (@idCliente,@PBitCredito,@PDecMovimento,@PSntTipoMovimento,@PIndUsuario )
FETCH NEXT FROM CURCLIENTE INTO @IDCLENTE
END
CLOSE CURCLIENTE
DEALLOCATE CURCLIENTE
COMMIT TRANSACTION
Carlos Faria
Curtidas 0
Respostas
Carlos Faria
02/03/2010
Ola Rodrigo
so Retificando abaixo
a procedure , faz um varredura na tabela onde os clientes obedecem os paramentros passados , em seguida ela lanca um debito para todos , valor esse passado pelo usuario, se voce se lembra foi voce quem me ajudou nessa proc do sql lembra ? entao agora preciso dela no firebird
GOSTEI 0
Rodrigo Mourão
02/03/2010
Olá Carlos,
Vou convertê-la para o firebird e lhe posto.
Peço a gentileza de aguardar.
Att,
Vou convertê-la para o firebird e lhe posto.
Peço a gentileza de aguardar.
Att,
GOSTEI 0
Carlos Faria
02/03/2010
Ok amigo , fico aguardando entao
GOSTEI 0
Rodrigo Mourão
02/03/2010
SET TERM ^ ;
CREATE PROCEDURE PROC_LANCA_DEBITO_Cliente(
PBitCredito SMALLINT,
PDecMovimento DECIMAL(12,2),
PSntTipoMovimento SMALLINT,
PIndUsuario INTEGER )
AS
DECLARE VARIABLE v_cliente CHAR(7);
BEGIN
FOR SELECT ID_CLIENTE INTO :v_cliente FROM TB_ASSOCIADOS
where dt_saida is null and id_categoria_cliente not in (1,3);
DO
BEGIN
INSERT INTO tb_ASSOCIADOS (ID_CLIENTE,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (:v_cliente, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
SUSPEND;
END
END^
SET TERM ; ^
CREATE PROCEDURE PROC_LANCA_DEBITO_Cliente(
PBitCredito SMALLINT,
PDecMovimento DECIMAL(12,2),
PSntTipoMovimento SMALLINT,
PIndUsuario INTEGER )
AS
DECLARE VARIABLE v_cliente CHAR(7);
BEGIN
FOR SELECT ID_CLIENTE INTO :v_cliente FROM TB_ASSOCIADOS
where dt_saida is null and id_categoria_cliente not in (1,3);
DO
BEGIN
INSERT INTO tb_ASSOCIADOS (ID_CLIENTE,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (:v_cliente, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
SUSPEND;
END
END^
SET TERM ; ^
GOSTEI 0
Carlos Faria
02/03/2010
Veja que aqui eu so troquei os nomes das tabelas que da na mesma
nao compila , para em cima do campo nr_matricula
CREATE PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO
(
PBitCredito SMALLINT,
PDecMovimento DECIMAL(12,2),
PSntTipoMovimento SMALLINT,
PIndUsuario INTEGER
)
AS
DECLARE VARIABLE v_MOTOQUEIRO CHAR(7);
BEGIN
FOR SELECT NR_MATRICULA INTO :v_MOTOQUEIRO FROM tb_motoqueiro --seleciona na tabela motoqueiro
where id_categoria_diaria in (1,3);
DO
BEGIN
INSERT INTO tb_motoqueiro_movimentos -- insere na tabela motoqueiro movimento (nr_matricula,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (:v_Motoqueiro, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
SUSPEND;
END
CREATE PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO
(
PBitCredito SMALLINT,
PDecMovimento DECIMAL(12,2),
PSntTipoMovimento SMALLINT,
PIndUsuario INTEGER
)
AS
DECLARE VARIABLE v_MOTOQUEIRO CHAR(7);
BEGIN
FOR SELECT NR_MATRICULA INTO :v_MOTOQUEIRO FROM tb_motoqueiro --seleciona na tabela motoqueiro
where id_categoria_diaria in (1,3);
DO
BEGIN
INSERT INTO tb_motoqueiro_movimentos -- insere na tabela motoqueiro movimento (nr_matricula,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (:v_Motoqueiro, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
SUSPEND;
END
GOSTEI 0
Rodrigo Mourão
02/03/2010
Qual a mensagem de erro pois assim nao tem como identificar.
Printa a tela e me envia !!1
Att,
Printa a tela e me envia !!1
Att,
GOSTEI 0
Carlos Faria
02/03/2010
GOSTEI 0
Rodrigo Mourão
02/03/2010
Estranho Carlos,
Ele esta rejeitando o INTO. Pode me enviar seu banco pelo disco Virtual ???
Att,
GOSTEI 0
Carlos Faria
02/03/2010
Rodrigo segue o banco
http://video.devmedia.com.br/discovirtual/187481/DBMOTOTAXI.rar
deixa eu te fazer uma pergunta aqui mesmo , fora do chamado.
Eu to ralando num aplicativo faz tempo , preciso aprender como configuar esse aplicativo para distribui-lo na net : exemplo qtos dias de avaliação quantos cadastros e etc . mesmo que seja com uma ferramenta de 3º .
se eu abrir um outro chamado la no site vc monta uma video explicativa falando sobre esse assunto ?
GOSTEI 0
Rodrigo Mourão
02/03/2010
Posso lhe sugerir um componente pago que eu uso para controle de aplicacao ele vai por data e/ou por numero de execução. Ele tem um gerador de serial e querendo libera definitivamente.
Abra m chamado, pede pra passar pra mim que lhe explico tudo.
Att,
Abra m chamado, pede pra passar pra mim que lhe explico tudo.
Att,
GOSTEI 0
Carlos Faria
02/03/2010
ja abri la o chamado , ok , fico nesse aqui aguardando a procedure
GOSTEI 0
Carlos Faria
02/03/2010
Capricha na video desse aplicativo ai , vai ser de grande utilidade !
GOSTEI 0
Rodrigo Mourão
02/03/2010
Segue procedure correta, as alteraçoes estão em vermelho.
SET TERM ^ ;
create or alter procedure PRI_LANCA_DEBITO_MOTOQUEIRO
(
PBitCredito SMALLINT,
PDecMovimento DECIMAL(12,2),
PSntTipoMovimento SMALLINT,
PIndUsuario INTEGER
)
AS
DECLARE VARIABLE v_MOTOQUEIRO INTEGER;
BEGIN
FOR SELECT NR_MATRICULA FROM tb_motoqueiro where id_categoria_diaria in (1,3) INTO :v_MOTOQUEIRO
DO
BEGIN
INSERT INTO tb_motoqueiro_movimento (nr_matricula,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (:v_Motoqueiro, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
SUSPEND;
END
end^
SET TERM ; ^
GRANT INSERT ON TB_MOTOQUEIRO_MOVIMENTO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT INSERT ON TB_MOTOQUEIRO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT EXECUTE ON PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO TO SYSDBA;
Att,
SET TERM ^ ;
create or alter procedure PRI_LANCA_DEBITO_MOTOQUEIRO
(
PBitCredito SMALLINT,
PDecMovimento DECIMAL(12,2),
PSntTipoMovimento SMALLINT,
PIndUsuario INTEGER
)
AS
DECLARE VARIABLE v_MOTOQUEIRO INTEGER;
BEGIN
FOR SELECT NR_MATRICULA FROM tb_motoqueiro where id_categoria_diaria in (1,3) INTO :v_MOTOQUEIRO
DO
BEGIN
INSERT INTO tb_motoqueiro_movimento (nr_matricula,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (:v_Motoqueiro, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
SUSPEND;
END
end^
SET TERM ; ^
GRANT INSERT ON TB_MOTOQUEIRO_MOVIMENTO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT INSERT ON TB_MOTOQUEIRO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT EXECUTE ON PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO TO SYSDBA;
Att,
GOSTEI 0
Carlos Faria
02/03/2010
Ola Rodrigo
Compilou agora porem essa proc nao esta fazendo como no sql , ela nao estas varrendo a tabela motoqueiro para inserir debito para todos ,esta pegando apenas o primeiro registo
eu vou dar mais uma estuda aqui nos fontes dela mais a principio e isso mesmo , so inserte o primeiro e nao todoso os cadastrados como deveria ser !
GOSTEI 0
Carlos Faria
02/03/2010
Realmento , nao esta varrendo a tabela insere somenete o primeiro registo !!"
GOSTEI 0
Rodrigo Mourão
02/03/2010
Remove o suspend de dentro do loop.
SET TERM ^ ;
create or alter procedure PRI_LANCA_DEBITO_MOTOQUEIRO
(
PBitCredito SMALLINT,
PDecMovimento DECIMAL(12,2),
PSntTipoMovimento SMALLINT,
PIndUsuario INTEGER
)
AS
DECLARE VARIABLE v_MOTOQUEIRO INTEGER;
BEGIN
FOR SELECT NR_MATRICULA FROM tb_motoqueiro where id_categoria_diaria in (1,3) INTO :v_MOTOQUEIRO
DO
BEGIN
INSERT INTO tb_motoqueiro_movimento (nr_matricula,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (:v_Motoqueiro, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
SUSPEND;
END
end^
SET TERM ; ^
GRANT INSERT ON TB_MOTOQUEIRO_MOVIMENTO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT INSERT ON TB_MOTOQUEIRO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT EXECUTE ON PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO TO SYSDBA;
Att,
SET TERM ^ ;
create or alter procedure PRI_LANCA_DEBITO_MOTOQUEIRO
(
PBitCredito SMALLINT,
PDecMovimento DECIMAL(12,2),
PSntTipoMovimento SMALLINT,
PIndUsuario INTEGER
)
AS
DECLARE VARIABLE v_MOTOQUEIRO INTEGER;
BEGIN
FOR SELECT NR_MATRICULA FROM tb_motoqueiro where id_categoria_diaria in (1,3) INTO :v_MOTOQUEIRO
DO
BEGIN
INSERT INTO tb_motoqueiro_movimento (nr_matricula,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
VALUES (:v_Motoqueiro, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
SUSPEND;
END
end^
SET TERM ; ^
GRANT INSERT ON TB_MOTOQUEIRO_MOVIMENTO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT INSERT ON TB_MOTOQUEIRO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT EXECUTE ON PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO TO SYSDBA;
Att,
GOSTEI 0
Carlos Faria
02/03/2010
Grande Rodrigo ,
vou estudar e testar aqui a proc , mas pode fechar o chamado ai acho que aqui ja era.
GOSTEI 0