segunda-feira, 5 de novembro de 2012

JasperReports / IReport - Utilizando Diversas Bases de Dados para Gerar um Relatório

Estava quebrando a cabeça para poder gerar um relatório no iReport, utilizando mais de uma fonte de dados.
No meu caso, eram duas bases de dados Oracle diferentes.
Queria pegar informações da Base 1 e utilizar um dado deste retorno para consultar na Base 2.
Para realizar isso, utilizamos o subreport.
O segredo está na hora que inserir o subreport, selecionar para utilizar uma base de dados diferente
E inserir o seguinte comando:

java.sql.DriverManager.getConnection("jdbc:oracle:thin:@//IPBASEDADOS:PORT/SERVICENEMAE","iUSUARIO","SENHA)
Se ocorrer algum erro de que não foi possível encontrar um driver para essa base de dados, será necessário copiar o arquivo ojdbc14.jar para o EXT da sua JRE.

Para maiores dúvidas, recomendo este excelente tutorial que me ajudou muito:
http://www.packtpub.com/article/jasperreports-using-multiple-relational-databases-to-generate-report

Até mais...

quinta-feira, 9 de agosto de 2012

Porcentagem PL/SQL - Sem utilizar SUM()

Utilizando a função analítica do ORACLE, RATIO_TO_REPORT, podemos ter o retorno da porcentagem total da coluna. Não necessitando realizar um SUM da coluna.
Muito útil!

Segue abaixo um exemplo de utilização.
SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rr
   FROM employees
   WHERE job_id = 'PU_CLERK';

LAST_NAME                     SALARY         RR
------------------------- ---------- ----------
Khoo                            3100 .223021583
Baida                           2900 .208633094
Tobias                          2800 .201438849
Himuro                          2600  .18705036
Colmenares                      2500 .179856115

Trabalhando com datas Pl/SQL 1


Para relembrar...

Descrição
Expressão PL/SQL
Now
SYSDATE
Tomorow/ next day
SYSDATE + 1
Seven days from now
SYSDATE + 7
One hour from now
SYSDATE + 1/24
Three hours from now
SYSDATE + 3/24
An half hour from now
SYSDATE + 1/48
10 minutes from now
SYSDATE + 10/1440
30 seconds from now
SYSDATE + 30/86400
Tomorrow at 12 midnight
TRUNC(SYSDATE + 1)
Tomorrow at 8 AM
TRUNC(SYSDATE + 1) + 8/24
Next Monday at 12:00 noon
NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') + 12/24
First day of the month at 12 midnight
TRUNC(LAST_DAY(SYSDATE ) + 1)
The next Monday, Wednesday or Friday at 9 a.m
TRUNC(LEAST(NEXT_DAY(sysdate,''MONDAY' ' ),NEXT_DAY(sysdate,''WEDNESDAY''), NEXT_DAY(sysdate,''FRIDAY'' ))) + (9/24)

quinta-feira, 8 de março de 2012

Ordernação com Row_Number() - Order By


Precisava utilizar uma query, onde limitasse o valor pelo rownum da linha.
Acontece que quando aplicasse o order by, ele aplica primeiro o rownum e depois faz a ordernação.
Assim não conseguia a numeração correta para limitar o retorno da linha.
Pesquisando achei a seguinte utilização do ROW_NUMBER() OVER (ORDER BY campo DESC) .
Utilizando esta função com o "over", ele aplica o row_number durante a ordernação.
Segue um exemplo:

SELECT last_name FROM
(SELECT last_name, ROW_NUMBER() OVER (ORDER BY last_name) R FROM employees)
WHERE R BETWEEN 51 and 100;


Mais informações no Link:

terça-feira, 6 de março de 2012

Selects Hierárquicos Oracle

Utilizamos este recurso quando temos um relacionamento de pai-filho na mesma tabela.
Com estes operadores/funções, fica mais fácil e com uma boa performance o retorno de algumas consultas.
Como exemplo uma consulta de um Menu, Hierarquia de Pessoas de uma empresa, processos encadeados.

Exemplo de utilização:

select level
,cd_atendente_razao
,nm_atendente_razao
,tp_usage_system
,cd_atendente_razao_high
from tbl_atendente
start with cd_atendente_razao = 8
connect by prior cd_atendente_razao_high = cd_atendente_razao
order by level desc;

Utilizamos os operadores/funções:
start with -> Define qual o primeiro registro será buscado.
connect by prior -> Clausula que faz relacionamento entre os níveis.



quarta-feira, 25 de janeiro de 2012

Alterar UUID do VirtualBox


Quando copiamos um VDI para duplicar algum Sistema Operacional no VirtualBox, precisamos alterar o UUID da Imagem.
Segue o comando, reparar nas " ", passando o diretório como valor.

VBoxManage internalcommands sethduuid "C:\Users\romerodo\VirtualBox VMs\WindowsXP-VS6\WindowsXP-VS6.vdi"
 

Cadastrar Email

Sobre o Blog

Neste blog irei compartilhar as minhas experiências e observações. Os temas serão variados, mas com ênfase em tecnologia. Inscreva-se nos nossos canais para receber atualizações.