[firebase-br] Retornar apenas um registro

HPensador helio.oliveira em as.unifacs.br
Sex Set 21 11:23:10 -03 2007


Bom dia Colegas!

Para gerar um relatório um tanto complexo tive que fazer uma SP, só que
a mesma está retornando 3 registros ao invés de apenas 1 (explico - há
um relacionamento entre a tabela de propostas e proposta_sistema e no
momento que executo a SP a tabela de proposta_sistema tem 3 registro
que refere-se a proposta número 1) - e não consegui fazer com que a
minha SP em questão me retornasse apenas um registro - abaixo esta a SP
para ver se algum colega pode me dar alguma ideia de como fazer isto.
Sds, HPensador

CREATE PROCEDURE REL_PROPOSTA (
    pro_numero integer)
returns (
    pro_per_inicio date,
    pro_per_fim date,
    pro_valor numeric(15,4),
    pro_valor_implantacao numeric(15,4),
    pro_cliente varchar(50),
    pro_sistema0 varchar(50),
    pro_sistema1 varchar(50),
    pro_sistema2 varchar(50),
    pro_sistema3 varchar(50),
    pro_sistema4 varchar(50),
    pro_sistema5 varchar(50),
    pro_sistema6 varchar(50),
    pro_sistema7 varchar(50),
    pro_sistema8 varchar(50),
    pro_sistema9 varchar(50))
as
declare variable pro_sistema varchar(50);
begin
  select p.per_inicio,
         p.per_fim,
         p.valor,
         p.valor_implatacao,
         c.nome
  from proposta p
    join cliente c on (c.cod_cliente = p.cod_cliente)
  where p.numero = :pro_numero
  into :pro_per_inicio, :pro_per_fim, :pro_valor,
       :pro_valor_implantacao, :pro_cliente;
  --Selecionando o(s) sistema(s) da proposta
  pro_sistema0 = '';
  pro_sistema1 = '';
  pro_sistema2 = '';
  pro_sistema3 = '';
  pro_sistema4 = '';
  pro_sistema5 = '';
  pro_sistema6 = '';
  pro_sistema7 = '';
  pro_sistema8 = '';
  pro_sistema9 = '';
  for select s.descricao
      from proposta_sistema ps
        join proposta x on (x.numero = :pro_numero)
        join sistema s on (s.cod_sistema = ps.cod_sistema)
      into :pro_sistema
  do
  begin
    if (:pro_sistema0 = '') then
       pro_sistema0 = :pro_sistema;
    else
      if (:pro_sistema1 = '') then
         pro_sistema1 = :pro_sistema;
      else
        if (:pro_sistema2 = '') then
           pro_sistema2 = :pro_sistema;
        else
          if (:pro_sistema3 = '') then
             pro_sistema3 = :pro_sistema;
          else
            if (:pro_sistema4 = '') then
               pro_sistema4 = :pro_sistema;
            else
              if (:pro_sistema5 = '') then
                 pro_sistema5= :pro_sistema;
              else
                if (:pro_sistema6 = '') then
                   pro_sistema6 = :pro_sistema;
                else
                  if (:pro_sistema7 = '') then
                     pro_sistema7 = :pro_sistema;
                  else
                    if (:pro_sistema8 = '') then
                       pro_sistema8 = :pro_sistema;
                    else
                      if (:pro_sistema9 = '') then
                         pro_sistema9 = :pro_sistema;
    suspend;
  end
end

-- 






Mais detalhes sobre a lista de discussão lista