Criando Relatórios Jasper com SQL
De DTI Wiki
Tabela de conteúdo |
Configurando o iReport
Execute o iReport, e após aberto vá até o menu Ferramentas e abra o item Opções.
- Dentro da janela de Opções vá até a aba Classpath (Passo 1);
- Clique no botão Add Jar e selecione o JAR classes12.jar, localizado na pasta C:\oracle\product\10.2.0\client\jdbc\lib (Passo 2) OU se você possui o instant client instalado, selecione o JAR ojdbc5.jar localizado na pasta C:\Program Files (x86)\instantclient_11_2;
- Clique em Ok e pronto, o seu iReport estará configurado para trabalhar diretamente com o Oracle.
Configurando o acesso ao Oracle
- Com iReport aberto, clique no botão para acessar os Datasources.
- Na janela Connections / Datasources que acabou de abrir, clique no botão New.
- No tipo de Datasource, selecione Database JDBC connection e clique em Next, conforme a imagem abaixo:
- Defina os campos da configuração do JDBC conforme à imagem abaixo. Clique em Wizard para preencher automaticamente o JDBC URL:
Obs.: troque os valores como nome do servidor,nome banco e usuario, nos campos JDBC URL, Server Address, Database e Username pelos valores reais.
- Clique no botão Test, se não retornar nenhuma mensagem de erro, clique em Save. Se retornar alguma mensagem de erro, verifique se os campos estão preenchidos corretamente e se na lista de drivers no campo JDBC Driver, o driver selecionado não está na cor vermelha. Se estiver vermelho, volte para o passo Configurando o iReport e veja se o .jar é o correto.
Functions no banco de dados
- Primeiro deve ser criado um TYPE, pode ser um type genérico caso use muitos dados, ou até mesmo, se eles se repitam muito entre várias procedures. O type deve ficar como OBJECT.
/*-----------------------------------------------------------------------------* * * * Esquema..: SCHEMA * * * * Objeto...: t_wiki * * * * Descrição: Object type utilizado para exemplo na wiki * * * * Histórico: * * Data Autor Descrição * * ---------- ---------- ----------------------------------------------------- * * 28/05/2010 TOMAZIO Criação * *-----------------------------------------------------------------------------*/ CREATE OR REPLACE TYPE schema.t_wiki AS OBJECT ( campo1 VARCHAR2(500), campo2 VARCHAR2(500), campo3 VARCHAR2(500), campo4 CLOB, campo5 BLOB )
- Declare esse type na package que usará esses dados:
TYPE tt_wiki IS TABLE OF t_wiki ;
- Após declarar o type, deve ser criada uma function que chamará a procedure original e ligará os campos retornados da procedure aos campos correspondentes no type. O tipo do retorno deve ser o subtipo criado a partir do tipo original.
Não é necessário criar campos number ou date no type, caso o campo correspondente no type seja um varchar, ele se tornará automaticamente varchar, sem necessidade de transformação.
/*-----------------------------------------------------------------------------* * * * Esquema..: SCHEMA * * * * Objeto...: fun_testewiki * * * * Descrição: Função que retorna os dados do relatório * * * * Histórico: * * Data Autor Descrição * * ---------- ---------- ----------------------------------------------------- * * 28/05/2010 TOMAZIO Criação * * * *-----------------------------------------------------------------------------*/ FUNCTION fun_testewiki(in_param1 IN NUMBER) RETURN tt_wiki PIPELINED IS c_result t_refcur; v_linha t_wiki := t_wiki(NULL, NULL, NULL, NULL, NULL); BEGIN schema.PACKAGE.prc_getdados(in_param1, c_result); LOOP FETCH c_result INTO v_linha.campo1, v_linha.campo2, v_linha.campo3, v_linha.campo4, v_linha.campo5; EXIT WHEN c_result%NOTFOUND; PIPE ROW(v_linha); END LOOP; CLOSE c_result; END fun_testewiki;
Chamando functions
- Com o seu .jrxml aberto, vá até o painel Report Inspector e clique com o botão direito sobre o nome do relatório. Após isso, clique no item Edit Query.
- Ao abrir a janela Report Query, configure o campo Query language para SQL, no campo abaixo escreva o SQL usado para carregar os dados, LEMBRE-SE, o início do SELECT deve ser sempre da seguinte forma:
SELECT * FROM TABLE (SCHEMA.PACKAGE.NOME_DA_FUNCAO_QUE_RETORNA_OS_DADOS(PARAMETROS_FUNCAO))
- Depois de ter informado o SQL, clique em Reald fields para exibir os campos que são carregados no type retornado pela função e clique em Ok.
- Obs.: Campos do tipo oracle.sql.CLOB devem ser modificados para java.lang.String.