GARANTIR DESCONTO

Fórum Funcao com erro estranho #26630

21/11/2006

0

Tenho uma funcao em pgsql que executa dentro do PGManager e dentro da minha aplicacao delphi ela nao executa, ou melhor, executa sem erros e nao grava noo banco de dados... alguem tem ideia do que pode estar ocorrendo? Uso delphi+zeos para acesso, e uso um TZQuery dando um select na funcao e passando os parametros que sao necessários...

Nota: na funcao eu criei como retorno de funcao todos os campos que necessito pra incluir na tabela, e note que em ambos os casos no delphi e no PgManager o retorno é identico!!!!


Estranho né??? Alguem tem alguma ideia???


abaixo a funcao:


DECLARE
  IdCliente ALIAS FOR $1;
  PerIni ALIAS FOR $2;
  PerFim ALIAS FOR $3;
  Valor ALIAS FOR $4;
  ValorMinimoFatura NUMERIC;
  ValorAcumuladoFatura NUMERIC;
  ValorFinalFatura NUMERIC;
  DataMinima DATE;
  Resultado VARCHAR;
  Sequencia INTEGER;
  Num_Fat VARCHAR;
  Vcto DATE;
  Obs VARCHAR;
  ClienteCodigo INTEGER;
  respif VARCHAR;
BEGIN
  -- Resultado
  Resultado := ´´;

  -- Variavel para guardar o valor final da fatura
  ValorFinalFatura := Valor;

  -- Pega o valor minimo de faturas, assim poderá gravar em outra
  -- tabela de faturamento
  SELECT INTO
    ValorMinimoFatura x.valor_minimo_fatura_cliente
  FROM
    aux.valores_padrao_sistema x;

  IF ValorMinimoFatura IS NULL THEN
    ValorMinimoFatura := 0;
  END IF;

  -- Pega o valor acumulado de faturas que nao chegaram ao valor minimo
  SELECT INTO
    ValorAcumuladoFatura SUM(fm.fat_valor)
  FROM
    fat.fatura_min fm
  WHERE
    (fm.cli_codigo = IdCliente);

  IF ValorAcumuladoFatura IS NULL THEN
    ValorAcumuladoFatura := 0;
  END IF;

  -- Só preciso da data se houver valor acumulado
  IF ValorAcumuladoFatura > 0 THEN
    -- Atualiza o valor final da fatura
    ValorFinalFatura := ValorFinalFatura + ValorAcumuladoFatura;
    -- Pega o inicio do periodo da fatura
    SELECT INTO
      DataMinima MIN(fm.fat_per_inicial)
    FROM
      fat.fatura_min fm
    WHERE
      (fm.cli_codigo = IdCliente);
      
    Obs := ´FATURA ACUMULADA COBRADA DESDE O PERÍODO ´ ||
           CAST(DataMinima as VARCHAR);
  END IF;

  -- Grava no banco de dados
  Num_Fat := fat.fnc_gera_numero_fatura(IdCliente);
  Vcto := fat.fnc_gera_vcto_fatura(IdCliente);

  IF ValorFinalFatura >= ValorMinimoFatura THEN
    Sequencia := NEXTVAL(´fat.seq_fatura´);
      INSERT INTO fat.fatura(fat_sequencia, fat_fatura, cli_codigo,
        fat_vencimento, fat_emissao, fat_per_inicial, fat_per_final,
        fat_valor)
      VALUES(Sequencia, Num_Fat, IdCliente, Vcto, CURRENT_DATE, PerIni,
        PerFim, ValorFinalFatura);
    respif := ´entrou no if´;
  ELSE
    Sequencia := NEXTVAL(´fat.seq_fatura_min´);
    INSERT INTO fat.fatura_min(fat_sequencia, fat_fatura, cli_codigo,
      fat_vencimento, fat_emissao, fat_per_inicial, fat_per_final,
      fat_valor, fat_obs)
    VALUES(Sequencia, Num_Fat, IdCliente, Vcto, CURRENT_DATE, PerIni,
      PerFim, ValorFinalFatura, Obs);
    respif := ´entrou no else´;
  END IF;

  Resultado := ´Cod.Cliente: ´ || CAST(IdCliente AS VARCHAR) || ´ - ´ ||
               ´Fatura: ´ || num_fat || ´ - ´ ||
               ´Vcto: ´ || CAST(Vcto AS VARCHAR) || ´ - ´ ||
               ´Valor: ´ || TO_CHAR(ValorFinalFatura, ´999,999.99´) || ´ - ´ ||
               ´Valor Min: ´ || TO_CHAR(ValorMinimoFatura, ´999,999.99´) ||  ´ - ´ ||
               ´IF: ´ || respif ;

  RETURN Resultado;
END;



Tuskinhu

Tuskinhu

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar