RES: [firebase-br] Porquê o update não funciona?

Maciel Soncini Bueno maciel em 2msolutions.com.br
Ter Jan 10 10:31:35 -03 2006


Amigo, abaixo os comentários sobre suas orientações, muito oportunas!

Agradeço o seu retorno.

-----Mensagem original-----
De: lista-bounces em firebase.com.br
[mailto:lista-bounces em firebase.com.br]Em nome de Forum ASR & Associados
Enviada em: terça-feira, 10 de janeiro de 2006 02:45
Para: FireBase
Assunto: Re: [firebase-br] Porquê o update não funciona?


Caro Maciel,

Não encontrei nenhum problema no teu código, vou apenas sugerir alguns
pontos que vc deve verificar e/ou melhorar:

- não tem necessidade de colocar aquele suspend no final do teu código,
pq vc não retorna nenhum valor (RETURNS) na procedure
  Realmente. Irei retirá-lo.

- verifique se não existe nenhuma trigger sendo rodada ?
  Não existe nenhuma trigger sendo utilizada.

- quando vc executa o comando vc esta dando o commit ?
  Não utilizei a Stored Procedure na minha aplicação Delphi
  Por enquanto, apenas testei dentro do IBEXPERT.
  Após rodar a procedure tenho clicado no ícone para dar o commit.

- vc esta executando uma outra procedure (faz_faturamento), para obter
alguns valores, dentre eles o  poMoedaConv, ele não esta retornando um
valor NULL ?
  Não estão retornando. Já debuggei e os valores não retornam nulos.

- acho que vc esta utilizando variáveis em excesso,  por exemplo:
csValLiquido e poValLiquido, vc poderia pegar o valor direto do select
da procedure
  Concordo com você. Apenas fiz isso para manter uma compatibilidade na
minha documentação.

- muitas vezes uma tratamento errado com campos que retornam NULL pode
causar coisas desse tipo, faça verificações antes das atribuições ou
utilize o COALESCE para verificar o conteúdo do campo
  Realmente estão ok.

O estranho é que já cheguei até a substituir este Update por um simples, do
tipo:

UPDATE ML51
    SET MOEDACONV     = 1;

e mesmo assim não rodou.

Mais uma vez obrigado pelo seu retorno.

Espero ter ajudado,

Airton Salviano Ramos de Souza
Analista de Sistemas
www.asreassociados.com.br

Maciel Soncini Bueno wrote:

>Pessoal,
>
>Essta Stored Procedure abaixo não roda o update.
>
>A condição existe dentro da tabela.
>
>Mesmo que eu coloque um UPDATE simples tipo:
>
>    UPDATE ML51
>    SET MOEDACONV     = 1;
>
>nada acontece na tabela.
>
>Se eu pego este UPDATE e jogo numa stored procedure só para ele, funciona
>todavia se roda este stored procedure dentro desta com EXECUTE PROCEDURE...
>também o UPDATE não é executado ou o resultado que deveria gerar não é
>gerado.
>
>Alguém sabe o porquê disto, o que eu deveria fazer antes, comando, etc...
>
>Obrigado
>
>Maciel
>
>
>CREATE PROCEDURE PROCESSA_FATURAMENTO (
>    "piDataI" DATE,
>    "piDataF" DATE,
>    "piCodConv" CHAR(4),
>    "piCodCol" CHAR(3),
>    "piCodMedS" VARCHAR(6),
>    "piCodGrp" CHAR(2))
>AS
>DECLARE VARIABLE "vCodConv" CHAR(4);
>DECLARE VARIABLE "vCodPlano" VARCHAR(6);
>DECLARE VARIABLE "vCodExa" VARCHAR(10);
>DECLARE VARIABLE "vQtde" INTEGER;
>DECLARE VARIABLE "vData_Fat" DATE;
>DECLARE VARIABLE "vUrgente" CHAR(1);
>DECLARE VARIABLE "vCodReq" INTEGER;
>DECLARE VARIABLE "vUrgPac" CHAR(1);
>DECLARE VARIABLE "vMatMed" CHAR(1);
>DECLARE VARIABLE "vCodCol" CHAR(3);
>DECLARE VARIABLE "vCodMedS" INTEGER;
>DECLARE VARIABLE "vCodGrp" CHAR(2);
>DECLARE VARIABLE "poMoedaConv" CHAR(3);
>DECLARE VARIABLE "poCodAMB" VARCHAR(11);
>DECLARE VARIABLE "poTaxaUrg" NUMERIC(10,4);
>DECLARE VARIABLE "poValBruto" DOUBLE PRECISION;
>DECLARE VARIABLE "poValLiquido" DOUBLE PRECISION;
>DECLARE VARIABLE "poValPac" DOUBLE PRECISION;
>DECLARE VARIABLE "poValPacTot" DOUBLE PRECISION;
>DECLARE VARIABLE "poValConv" DOUBLE PRECISION;
>DECLARE VARIABLE "poValConvTot" DOUBLE PRECISION;
>DECLARE VARIABLE "poValCh" NUMERIC(10,4);
>DECLARE VARIABLE "poQtdCh" NUMERIC(10,4);
>DECLARE VARIABLE "poMetraFilme" NUMERIC(10,4);
>DECLARE VARIABLE "poValFilme" DOUBLE PRECISION;
>DECLARE VARIABLE "poValMatMed" DOUBLE PRECISION;
>DECLARE VARIABLE "poValMatMedConv" DOUBLE PRECISION;
>DECLARE VARIABLE "poValMatMedPac" DOUBLE PRECISION;
>DECLARE VARIABLE "poCobraFranq" CHAR(1);
>DECLARE VARIABLE "poValFranq" DOUBLE PRECISION;
>DECLARE VARIABLE "poConvPart" CHAR(3);
>DECLARE VARIABLE "poValChFilme" NUMERIC(10,4);
>DECLARE VARIABLE "poAcrescimo" DOUBLE PRECISION;
>DECLARE VARIABLE "poAcrPlano" DOUBLE PRECISION;
>DECLARE VARIABLE "poFatorSetor" DOUBLE PRECISION;
>DECLARE VARIABLE "poAvista" DOUBLE PRECISION;
>DECLARE VARIABLE "poDescExa" VARCHAR(27);
>DECLARE VARIABLE "csValBruto" NUMERIC(18,2);
>DECLARE VARIABLE "csValLiquido" NUMERIC(18,2);
>DECLARE VARIABLE "csValPac" NUMERIC(18,2);
>DECLARE VARIABLE "csValPacTot" NUMERIC(18,2);
>DECLARE VARIABLE "csValConv" NUMERIC(18,2);
>DECLARE VARIABLE "csValConvTot" NUMERIC(18,2);
>DECLARE VARIABLE "csValFilme" NUMERIC(18,2);
>DECLARE VARIABLE "csValMatMed" NUMERIC(18,2);
>DECLARE VARIABLE "csValMatMedConv" NUMERIC(18,2);
>DECLARE VARIABLE "csValMatMedPac" NUMERIC(18,2);
>DECLARE VARIABLE "csValFranq" NUMERIC(18,2);
>DECLARE VARIABLE "csAcrescimo" NUMERIC(18,2);
>DECLARE VARIABLE "csAcrPlano" NUMERIC(18,2);
>DECLARE VARIABLE "csFatorSetor" NUMERIC(18,2);
>DECLARE VARIABLE "csAvista" NUMERIC(18,2);
>begin
>  for select ML51.CODCONV, ML51.CODPLANO, ML51.CODEXA, ML51.QTDE,
>             ML51.DATA_FAT, ML51.URGENTE, ML5.CODREQ, ML5.URGPAC,
>ML5.MATMED,
>             ML5.CODCOL, ML51.CODMEDS, ML1.CODGRP
>  from ML5
>  inner join ML51 on (ML5.CODREQ = ML51.CODREQ)
>  inner join ML1 on (ML51.CODEXA = ML1.CODEXA)
>  inner join ML12 on (ML1.CODGRP = ML12.CODGRP)
>  inner join ML3 on (ML51.CODMEDS = ML3.CODMEDS)
>  inner join ML16 on (ML51.CODDST = ML16.CODDST)
>  inner join ML2 on (ML51.CODCONV = ML2.CODCONV)
>  inner join ML6 on (ML5.CODCOL = ML6.CODCOL)
>  where ML51.DATA_FAT between :"piDataI" and :"piDataF" and
>        ML51.CODCONV containing :"piCodConv" and
>        ML5.CODCOL containing :"piCodCol" and
>        ML51.CODMEDS containing :"piCodMedS" and
>        ML1.CODGRP containing :"piCodGrp"
>  order by ML5.CODREQ
>  into :"vCodConv", :"vCodPlano", :"vCodExa", :"vQtde",
>       :"vData_Fat", :"vUrgente", :"vCodReq", :"vUrgPac", :"vMatMed",
>       :"vCodCol", :"vCodMedS", :"vCodGrp"
>  do
>  begin
>    select *
>    from faz_faturamento(:"vCodConv", :"vCodPlano",
>                         :"vCodExa",  :"vQtde", :"vData_Fat",
>                         :"vUrgente", :"vCodReq",
>                         :"vUrgPac",  :"vMatMed", 'S')
>    into                 :"poMoedaConv",     :"poCodAMB",
>                         :"poTaxaUrg",       :"csValBruto",
>                         :"csValLiquido",    :"csValPac",
>                         :"csValPacTot",     :"csValConv",
>                         :"csValConvTot",    :"poValCh",
>                         :"poQtdCh",         :"poMetraFilme",
>                         :"csValFilme",      :"csValMatMed",
>                         :"csValMatMedConv", :"csValMatMedPac",
>                         :"poCobraFranq",    :"csValFranq",
>                         :"poConvPart",      :"poValChFilme",
>                         :"csAcrescimo",     :"csAcrPlano",
>                         :"csFatorSetor",    :"csAvista",
>                         :"poDescExa";
>
>    "poValBruto"      = "csValBruto";
>    "poValLiquido"    = "csValLiquido";
>    "poValPac"        = "csValPac";
>    "poValPacTot"     = "csValPacTot";
>    "poValConv"       = "csValConv";
>    "poValConvTot"    = "csValConvTot";
>    "poValFilme"      = "csValFilme";
>    "poValMatMed"     = "csValMatMed";
>    "poValMatMedConv" = "csValMatMedConv";
>    "poValMatMedPac"  = "csValMatMedPac";
>    "poValFranq"      = "csValFranq";
>    "poAcrescimo"     = "csAcrescimo";
>    "poAcrPlano"      = "csAcrPlano";
>    "poFatorSetor"    = "csFatorSetor";
>    "poAvista"        = "csAvista";
>
>    UPDATE ML51
>    SET MOEDACONV     = :"poMoedaConv",
>        CODAMB        = :"poCodAMB",
>        TAXAURG       = :"poTaxaUrg",
>        VALBRUTO      = :"poValBruto",
>        VALLIQUIDO    = :"poValLiquido",
>        VALPAC        = :"poValPac",
>        VALPACTOT     = :"poValPacTot",
>        VALCONV       = :"poValConv",
>        VALCONVTOT    = :"poValConvTot",
>        VLCH          = :"poValCh",
>        QTDCH         = :"poQtdCh",
>        METRAFILME    = :"poMetraFilme",
>        VLFILME       = :"poValFilme",
>        VLMATMED      = :"poValMatMed",
>        VALMATMEDCONV = :"poValMatMedConv",
>        VALMATMEDPAC  = :"poValMatMedPac",
>        COBRAFRANQ    = :"poCobraFranq",
>        VALFRANQ      = :"poValFranq",
>        CONVPART      = :"poConvPart",
>        VALCHFILME    = :"poValChFilme",
>        ACRESCIMO     = :"poAcrescimo",
>        ACRPLANO      = :"poAcrPlano",
>        FATORSETOR    = :"poFatorSetor",
>        AVISTA        = :"poAvista",
>        VLTOTAL       = :"poValBruto"
>    WHERE (ML51.CODREQ = :"vCodReq") AND (ML51.CODEXA = :"vCodExa") AND
>          (ML51.CODCONV = :"vCodConv") AND (ML51.DATA_FAT = :"vData_Fat");
>  end
>  suspend;
>end
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>


--
Esta mensagem foi verificada pelo sistema de anti-virus e
 acredita-se estar livre de perigo.


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.371 / Virus Database: 267.14.16/225 - Release Date: 09/01/2006






Mais detalhes sobre a lista de discussão lista