[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