[firebase-br] Ajuda com Store Procedure

Sandro Souza escovadordebits em gmail.com
Ter Jun 14 11:33:25 -03 2011


Bom dia/tarde Diego.

Nobre Diego, acredito que o problema é que você deixou o SUSPEND fora do
laço FOR, ou seja, basta você incluir um BEGIN antes daquele primeiro IF, e
um END logo depois do SUSPEND.

Da forma que está, apenas o IF está sendo executado dentro do laço, e o
SUSPEND ficou fora.

Espero ter ajudado mais que atrapalhado. :D

Em 14 de junho de 2011 10:25, Diego Maccari <diegomaccari em ig.com.br>escreveu:

>
> Bom dia pessoal
>
> Olha eu de novo pedindo ajuda de vc´s...
>
> Estou fazendo uma SP para validar as informações de um arquivo de
> importação após as informações importadas em uma tabela do FB 2.5 preciso
> fazer a referida validação.
> criei uma SP para fazer alguns testes aqui mas não estou obtendo o retorno
> desejado. O exemplo aqui é bem simples trata-se de validar um campo chamado
> de INDICADOR_MOVIMENTO
> que tem por objetivo indicar se a NF é de entrada ou saida, neste exemplo
> testei apenas se o valor é nulo. a ideia é que verifique todos os registro e
> retorne algumas informções sobre o erro
> so que a SP está retornando apenas a ultima ocorrencia do erro ao inves de
> retornar todos os erros da tabela, alguém poderia dar-me uma dica do erro
> que cometi ao escrever a SP...
>
> Segue DDL da SP.
>
> SET TERM ^ ;
>
> CREATE OR ALTER PROCEDURE VALIDA_431 (
>    pcnpj varchar(18),
>    pmes varchar(10),
>    pano integer)
> returns (
>    tipo_msg varchar(5),
>    cod_msg integer,
>    linha integer,
>    num_doc integer,
>    layout varchar(12),
>    mensagem varchar(150),
>    campo varchar(20),
>    origem varchar(7))
> as
> declare variable id integer;
> declare variable indicador_movimento varchar(1);
> declare variable modelo_documento varchar(2);
> declare variable serie_sub_documento varchar(5);
> declare variable numero_documento integer;
> declare variable data_emissao_documento date;
> declare variable codigo_participante varchar(14);
> declare variable data_entrada_saida date;
> declare variable valor_total_mercadoria decimal(18,2);
> declare variable valor_total_desconto decimal(18,2);
> declare variable valor_total_ipi decimal(18,2);
> declare variable valor_total_icms_subs decimal(18,2);
> declare variable valor_total_nota_fiscal decimal(18,2);
> declare variable codigo_transportador varchar(14);
> declare variable indicador_situacao_canc varchar(1);
> declare variable tipo_fatura varchar(1);
> declare variable modelo_documento_ref varchar(2);
> declare variable numero_documento_ref integer;
> declare variable data_emissao_doc_ref date;
> declare variable cod_part_documento_ref varchar(14);
> begin
> FOR
> SELECT
>  ID, INDICADOR_MOVIMENTO, MODELO_DOCUMENTO, SERIE_SUB_DOCUMENTO,
> NUMERO_DOCUMENTO, DATA_EMISSAO_DOCUMENTO,
>  CODIGO_PARTICIPANTE, DATA_ENTRADA_SAIDA, VALOR_TOTAL_MERCADORIA,
> VALOR_TOTAL_DESCONTO, VALOR_TOTAL_IPI,
>  VALOR_TOTAL_ICMS_SUBS, VALOR_TOTAL_NOTA_FISCAL, CODIGO_TRANSPORTADOR,
> INDICADOR_SITUACAO_CANC, TIPO_FATURA,
>  MODELO_DOCUMENTO_REF, NUMERO_DOCUMENTO_REF, DATA_EMISSAO_DOC_REF,
> COD_PART_DOCUMENTO_REF
> FROM
>  TB_IN_981_431
> WHERE
>  CNPJ = :PCNPJ AND MES = :PMES AND ANO = :PANO
> INTO
>  :ID, :INDICADOR_MOVIMENTO, :MODELO_DOCUMENTO, :SERIE_SUB_DOCUMENTO,
> :NUMERO_DOCUMENTO, :DATA_EMISSAO_DOCUMENTO,
>  :CODIGO_PARTICIPANTE, :DATA_ENTRADA_SAIDA, :VALOR_TOTAL_MERCADORIA,
> :VALOR_TOTAL_DESCONTO, :VALOR_TOTAL_IPI,
>  :VALOR_TOTAL_ICMS_SUBS, :VALOR_TOTAL_NOTA_FISCAL, :CODIGO_TRANSPORTADOR,
> :INDICADOR_SITUACAO_CANC, :TIPO_FATURA,
>  :MODELO_DOCUMENTO_REF, :NUMERO_DOCUMENTO_REF, :DATA_EMISSAO_DOC_REF,
> :COD_PART_DOCUMENTO_REF
> DO
>   IF (INDICADOR_MOVIMENTO = '') THEN
>     BEGIN
>       TIPO_MSG = (SELECT TIPO_MSG FROM TB_MSG_VALIDACAO WHERE COD_MSG =
> 1004);
>       COD_MSG = (SELECT COD_MSG FROM TB_MSG_VALIDACAO WHERE COD_MSG =
> 1004);
>       LINHA = ID;
>       NUM_DOC = NUMERO_DOCUMENTO;
>       LAYOUT = 'Layout 4.3.1';
>       MENSAGEM = (SELECT MENSAGEM FROM TB_MSG_VALIDACAO WHERE COD_MSG =
> 1004);
>       CAMPO = 'Ind. Movimento';
>       ORIGEM = (SELECT ORIGEM FROM TB_MSG_VALIDACAO WHERE COD_MSG = 1004);
>     END
>
>  Suspend;
> end^
>
> SET TERM ; ^
>
> GRANT SELECT ON TB_IN_981_431 TO PROCEDURE VALIDA_431;
>
> GRANT SELECT ON TB_MSG_VALIDACAO TO PROCEDURE VALIDA_431;
>
> GRANT EXECUTE ON PROCEDURE VALIDA_431 TO SYSDBA;
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista