[firebase-br] Ajuda com Store Procedure

Diego Maccari diegomaccari em ig.com.br
Ter Jun 14 10:25:24 -03 2011


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;


Mais detalhes sobre a lista de discussão lista