Efetuar repetição e concatenar as linhas

Dicas e truques sobre Oracle Reports Builder - modo gráfico ou modo caractere, ascii, arquivo .PRT, etc
Responder
Andre Luiz
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 29 Jul 2010 11:30 am
Localização: SC

Estou fazendo um relatório no qual faço o select que esta em anexo, retorna uma repetição com a variável garantias_emitente_pf. Agora vai a dúvida e dificuldade. Quero escrever no relatório uma linha seguida da outra. Tem como? como devo fazer?

Selecionar tudo

SELECT    'Nota de Empenho Nº '
       || c.n_empenho
       || ', no valor de R$'
       || f_sys_mascara_real (c.vl_total_empenho, 2)
       || '('
       || extenso (c.vl_total_empenho)
       || '),'
       || ' oriundo do Processo Nº '
       || v.id_processo
       || ', '
       || CASE
             WHEN NVL (c.n_contrato, 0) = 0
                THEN  'datado de '
                            || TO_CHAR (c.dt_emissao_empenho, 'dd/mm/yyyy')
                            || ', '
             WHEN NVL (c.vl_contrato, 0) = 0
                THEN  'datado de '
                            || TO_CHAR (c.dt_emissao_empenho, 'dd/mm/yyyy')
                            || ', '
             ELSE    ' referente ao Contrato Nº '
                  || c.n_contrato
                  || ', datado de '
                  || TO_CHAR (c.dt_emissao_empenho, 'dd/mm/yyyy')
                  || ', no valor total de R$'
                  || f_sys_mascara_real (c.vl_contrato, 2)
                  || '('
                  || extenso (c.vl_contrato)
                  || '),'
          END AS garantias_emitente_pf
  FROM gar_garantias g, gar_vinculadas v, gar_complemento c, cad_orgao o
 WHERE v.id_processo = :P_ID_PROCESSO
   AND v.id_garantia = g.id_garantia
   AND id_tipo = 54
   AND c.id_garantia = g.id_garantia
   AND o.id_orgao = :P_ID_ORGAO
   AND c.id_orgao = o.id_orgao
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Opa, blza?
Se eu entendi bem, tu pode jogar essa query para uma função usando sys_refcursor.
Algo assim:

Selecionar tudo

CREATE OR REPLACE FUNCTION funcao_teste(cur SYS_REFCURSOR) RETURN VARCHAR2 IS
  row_value LONG;
  RESULT LONG;
BEGIN

  LOOP
    FETCH cur
      INTO row_value;
    EXIT WHEN cur%NOTFOUND;
    IF (RESULT IS NULL)
    THEN
      RESULT := row_value;
    ELSE
      RESULT := RESULT || ' ' || row_value;
    END IF;
  END LOOP;
  CLOSE cur;

  RETURN(RESULT);
END funcao_teste;



SQL> SELECT funcao_teste(CURSOR (SELECT 'A' a
  2                         FROM dual
  3                       UNION
  4                       SELECT 'B'
  5                         FROM dual
  6                       UNION
  7                       SELECT 'C'
  8                         FROM dual
  9                       UNION
 10                       SELECT 'D'
 11                         FROM dual)) retorno
 12    FROM dual
 
RETORNO
--------------------------------------------------------------------------------
A B C D

Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes