StringBuilder?

Pessoal, tenho uma pesquisa CAVALAR, tosca enorme !
que funciona perfeitamente dentro do banco , mas quando vou fazer ela na aplicação não funciona !
Alguém pode da uma dica !


public String getSqlComun(){
		
		
		StringBuilder sql = new StringBuilder();
		
		sql.append(

//CODIGO TOSCÃO AQUI..
                  );

		
		return sql.toString();

Tio, não estou acreditando no que você está fazendo.

Na verdade Ficou Assim : ACREDITE KKKKKKKKKKKK



	public String getSqlComun(){
		
		
		StringBuilder sql = new StringBuilder();
		
		sql.append(" min(dt_disponib_agenda) dt_min_disponib_agenda, " +
	    " max(dt_disponib_agenda) dt_max_disponib_agenda, " +
	    " min(dt_marcacao_consulta) dt_min_marcacao_consulta, " +
	    " max(dt_marcacao_consulta) dt_max_marcacao_consulta, " +
	    " sum(decode(dt_marcacao_consulta,null,1,0)) qtd_consultas_abertas, " +
	    " sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1))  qtd_consultas_efetivadas, " +
	    " ( sum(decode(dt_marcacao_consulta,null,1,0)) + " +
	      " sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) " +
	    " ) qtd_consultas, " +
	    " sum(nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda)                  velocidade_dias, " +
	    " sum((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda)/24)             velocidade_horas, " +
	    " sum((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda)/1440)           velocidade_minutos " +
	    " , " +
	    " case " +
	      " when sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) <> 0 then " +
	          " ( sum(nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda) / " +
	            " sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) " +
	           " ) " +
	    " else " +
	      " 0      " + 
	    " end media_velocid_dias_consulta, " +
	    " case " +
	      " when sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) <> 0 then " +
	          " ( sum((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda)/24) / " +
	            " sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) " +
	          " ) " +
	     " else     " +
	       " 0 " +
			    " end media_velocid_horas_consulta " +
		" from tb_agenda_consulta " +
		" where (fl_ex_pf = 0 and fl_ex_pj = 0 and fl_ex_fil = 0 and fl_ex_tot = 0) " +
		    " and cd_uf is not null " );

		
		return sql.toString();
	}

Você cria um objeto a menos (não que isso vá acelerar seu sistema :slight_smile: ) se fizer o seguinte:

public String getSqlComun(){  
    return " min(dt_disponib_agenda) dt_min_disponib_agenda, " +  
    " max(dt_disponib_agenda) dt_max_disponib_agenda, " +  
    " min(dt_marcacao_consulta) dt_min_marcacao_consulta, " +  
    " max(dt_marcacao_consulta) dt_max_marcacao_consulta, " +  
    " sum(decode(dt_marcacao_consulta,null,1,0)) qtd_consultas_abertas, " +  
    " sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1))  qtd_consultas_efetivadas, " +  
    " ( sum(decode(dt_marcacao_consulta,null,1,0)) + " +  
      " sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) " +  
    " ) qtd_consultas, " +  
    " sum(nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda)                  velocidade_dias, " +  
    " sum((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda)/24)             velocidade_horas, " +  
    " sum((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda)/1440)           velocidade_minutos " +  
    " , " +  
    " case " +  
      " when sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) <> 0 then " +  
          " ( sum(nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda) / " +  
            " sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) " +  
           " ) " +  
    " else " +  
      " 0      " +   
    " end media_velocid_dias_consulta, " +  
    " case " +  
      " when sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) <> 0 then " +  
          " ( sum((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda)/24) / " +  
            " sum(decode((nvl(dt_marcacao_consulta,dt_disponib_agenda) - dt_disponib_agenda),0,0,1)) " +  
          " ) " +  
     " else     " +  
       " 0 " +  
            " end media_velocid_horas_consulta " +  
    " from tb_agenda_consulta " +  
    " where (fl_ex_pf = 0 and fl_ex_pj = 0 and fl_ex_fil = 0 and fl_ex_tot = 0) " +  
        " and cd_uf is not null ";  
}

No caso acima, você irá apenas retornar um objeto String que já está no pool de constantes.

Mas ainda não estou entendendo o seu problema.

Que que é isso ?

KKKKK, é de ficar doido esse código imenso, imagina a manutenção no select, rs…

usa o StringBuilder mesmo, mas do jeito certo, dando Append, ao invés de pular linha concatenando com “+”…

eTAN… Obrigado pela ajuda !

Cara, eu tenho umas 96 consultas feitas em PLSQ Oracle, que funciona perfeitamente… mas meu Gerente desgraçado dos inferno chegou de viagem e quer tudo que fiz em PLSQL oracle, em Java javão !

quero fazer isso aqui em HQL ou Critéria ou StringBuilder, em qual quer coisa que fique dentro da aplicação !
Agora eu não sei por que esse ANIMAL quer mexer nisso, já que ta tudo funcionando perfeitamente em PL.

Obrigado e abraço:

Este é a que ta dando mais trabalho:

org.hibernate.AnnotationException: Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn: br.com.inss.Usuario.vwUsuarioList

cursor filtroCpf is --colocada para tirar tipo de atendimento odontologia select u.nm_pessoa_razao_social_u ,u.cd_usuario ,u.fl_tipo_pessoa_u from vw_usuarios u ,tb_tipo_rede_atendimento r ,tb_plano_pai pp ,tb_plano p where u.nu_cgc_cpf_t = to_number(pNu_Cpf) and u.fl_status_usuario = 2 and p.cd_plano = u.cd_plano and pp.cd_plano_pai = p.cd_plano_pai and r.cd_tipo_rede_atendimento = pp.cd_tipo_rede_atendimento and pp.cd_tipo_rede_atendimento &lt;&gt; 'OD' and r.ds_tipo_rede_atendimento &lt;&gt; 'ODONTOLOGIA';

[quote=guilherme.dio]Que que é isso ?

KKKKK, é de ficar doido esse código imenso, imagina a manutenção no select, rs…

usa o StringBuilder mesmo, mas do jeito certo, dando Append, ao invés de pular linha concatenando com “+”…[/quote]

Aham - nesse caso em particular (e apenas nesse caso, em que há apenas strings constantes), o operador “+” é otimizado pelo compilador.
Portanto, nesse caso em particular, e apenas nesse caso em particular, a minha solução é a mais rápida possível.
Não precisa usar sempre append se souber como que o compilador trabalha “por trás dos panos”.

eTAN… Obrigado pela ajuda !

Cara, eu tenho umas 96 consultas feitas em PLSQ Oracle, que funciona perfeitamente… mas meu Gerente desgraçado dos inferno chegou de viagem e quer tudo que fiz em PLSQL oracle, em Java javão !

quero fazer isso aqui em HQL ou Critéria ou StringBuilder, em qual quer coisa que fique dentro da aplicação !
Agora eu não sei por que esse ANIMAL quer mexer nisso, já que ta tudo funcionando perfeitamente em PL.

Obrigado e abraço:

Este é a que ta dando mais trabalho:

org.hibernate.AnnotationException: Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn: br.com.inss.Usuario.vwUsuarioList

cursor filtroCpf is --colocada para tirar tipo de atendimento odontologia select u.nm_pessoa_razao_social_u ,u.cd_usuario ,u.fl_tipo_pessoa_u from vw_usuarios u ,tb_tipo_rede_atendimento r ,tb_plano_pai pp ,tb_plano p where u.nu_cgc_cpf_t = to_number(pNu_Cpf) and u.fl_status_usuario = 2 and p.cd_plano = u.cd_plano and pp.cd_plano_pai = p.cd_plano_pai and r.cd_tipo_rede_atendimento = pp.cd_tipo_rede_atendimento and pp.cd_tipo_rede_atendimento &lt;&gt; 'OD' and r.ds_tipo_rede_atendimento &lt;&gt; 'ODONTOLOGIA';

Achei estranho que está dando erro de annotation do Hibernate, mas não vi onde você está usando o Hibernate.

Olha, quando preciso fazer SQL longos em Java faço desse jeito.

1 - Crio um arquivo txt com o SQL desejado.

SELECT coluna_1, coluna_2, coluna_3 FROM tabela WHERE coluna_1 = ? AND coluna_2 = ? AND coluna_3 = ? ORDER BY coluna_1 DESC, coluna_2 ASC

2 - Crio uma constante na classe que usará esse SQL

public static final String SQL_CONSULTA_TABELA_POR_COLUNA1_2_3;

3 - Inicializo a constante

static { SQL_CONSULTA_TABELA_POR_COLUNA1_2_3 = ResourceUtil.getResourceAsString("sqls/SQL_CONSULTA_TABELA_POR_COLUNA1_2_3.sql"); }
3.1 -Exemplo da classe que lê os SQLs.

public abstract class ResourceUtil { public String getResourceAsString(String name) { InputStream inputStream = ResourceUtil.class.getClassLoader().getResouceAsStream(name); if(inputStream != null) { return IOUtils.toString(inputStream); // commons-io, por exemplo } return null; } }
4 - A partir dai vc pode usar a constante em qualquer código, seja JDBC, Hibernate, JPA, etc.

PreparedStatement pstmt = c.prepareStatement(ClassXYZ.SQL_CONSULTA_TABELA_POR_COLUNA1_2_3); pstmt.set... pstmt.executeQuery...

Acho bem simples dessa forma, os SQLs ficam separados, formatados e documentados.

Junior Gostei dessa maneira !

al.barbosa Você ta certo ! pode ser que esteja relacionado errado a entidade !

1 Pergunta, para eu usar em um select tabela x com campo x1 com view z com campo x1 quer dizer tanto na view quanto na na tabela tem o mesmo campo…

ELAS TEM QUE TER RELACIONAMENTO ?A VIEW COM A TABELA ? o Hibernate exige isso ? não achei nada na documentação sobre o Assunto !

Valeu…

[quote=juniorsatanas]Junior Gostei dessa maneira !

al.barbosa Você ta certo ! pode ser que esteja relacionado errado a entidade !

1 Pergunta, para eu usar em um select tabela x com campo x1 com view z com campo x1 quer dizer tanto na view quanto na na tabela tem o mesmo campo…

ELAS TEM QUE TER RELACIONAMENTO ?A VIEW COM A TABELA ? o Hibernate exige isso ? não achei nada na documentação sobre o Assunto !

Valeu…[/quote]

Não sei se está relacionando errado a entidade, só tinha achado estranho porque não tinha visto onde estava o Hibernate.

Acho que não precisa esse relacionamento que você falou, e inclusive acho que não é possível - pelo menos não lembro de ter visto nenhum relacionamento de tabela com view.