[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