Archive for março de 2009
[ORACLE] Dimension? Increment? Teste isso!
Teste isso mas tente descobrir antes pra que serve. Comente.
1 2 3 4 5 | SELECT INTEGER_VALUE FROM DUAL WHERE 1=2 MODEL DIMENSION BY ( 0 AS KEY ) MEASURES ( 0 AS INTEGER_VALUE ) RULES UPSERT ( INTEGER_VALUE[ FOR KEY FROM 1 TO 10 INCREMENT 1 ] = CV(KEY)); |
[ORACLE] Retorne no formato XML
Veja um exemplo para ter um retorno XML de suas consultas. Aqui fiz um exemplo para três nós com repetição do nó 2 conforme o número de reigistros que o banco retornar. É bem simples, veja abaixo. A questão toda está somente em um campo de retorno (após o “select”).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT '<?xml version="1.0"?>'|| XMLELEMENT("NÓ_1", XMLAGG( XMLELEMENT("NÓ_2", XMLELEMENT("INFO_1",DADOS_TABELA_CAMPO1), XMLELEMENT("INFO_2",DADOS_TABELA_CAMPO2), XMLELEMENT("INFO_3",DADOS_TABELA_CAMPO3), XMLELEMENT("INFO_4",DADOS_TABELA_CAMPO4) ) ) ) XML FROM TABELA WHERE RELACIONAMENTOS GROUP BY AGRUPAMENTOS NECESSÁRIOS; |
[ORACLE] Agrupando e somando com um título
Para conseguirmos criar de uma maneira bem rápida uma somatoria com base em um group by (numérico) e ainda exibindo uma string informativa (total) sem precisar criar union ou qualquer outro recurso mais complexo, basta usarmos os comandos CASE GROUPING no retorno e ROLLUP no agrupamento. O CASE GROUPING verifica a necessidade de inserir o conteúdo do campo ou um valor string conforme as condições (= 1 quando chegar no “registro” somatório) e o ROLLUP usado junto com o GROUP BY calcula o total em si.
Veja exemplo:
1 2 3 4 5 6 7 | SELECT CASE GROUPING (CAMPO_AGRUPADOR) WHEN 1 THEN 'TOTAL_GERAL' ELSE CAMPO_AGRUPADOR END AS CATEGORIA, COUNT(CAMPO_SOMADO) AS SUB_TOTAL FROM TABELA GROUP BY ROLLUP(CAMPO_AGRUPADOR); |
[ORACLE] Uma dica rápida para mailling
Uma dica bem rápida para criar uma lista de e-mails concatenada em uma linha só utilizando as funções CONCATENATE e CONCAT.
Suponhamos ter a tabela PESSOAS na seguinte estrutura:
PESSOAS
-CAMPO_NOME_DEST VARCHAR2(100)
-CAMPO_EMAIL_DEST VARCHAR2(100)
Nossa consulta ficará assim:
1 2 3 | SELECT CONCATENATE(UPPER(NVL(CAMPO_NOME_DEST,SUBSTR(CAMPO_EMAIL_DEST,1,INSTR(CAMPO_EMAIL_DEST,'@')-1)))||' <'||CONCAT(LOWER(CAMPO_EMAIL_DEST),'>; ')) MAILLING FROM PESSOAS WHERE CAMPO_EMAIL_DEST IS NOT NULL; |
Importante: O retorno é limitado no buffer, dessa forma, fazendo em PL/SQL, faça o que for preciso com a string de retorno em seguida limpe a variável antes de chegar em seu limite.
[TECH] Amplie o alcance do roteador wireless
Uma idéia surpreendente para expandir a abrangencia de seu roteador Wireless. Segundo os comentários do blog Efetividade.net -que é a fonte de deste post-, todos tiveram sucesso. Faça um teste você também e comente seu resultado. Eu ainda não fiz! Assim que testar posto o resultado aqui. Como isso? Com apenas uma latinha de refrigerante.
Fonte: Efetividade.net
[ORACLE] Documentação 6i
Para quem ainda usa o Forms/Reports 6i independente da versão do banco), disponibilizo rapidamente a documentação da versão. Tudo num pacote só, estão 4 PDFs para trabalhar com Reports, desde uma rápida referência até trabalhos complexos com gráficos. Há também 2 PDFs para trabalhar com Forms, um é a documentação original, o outro é bem interessante, explica como fazer a migração do Forms 6i para o 10g, que possui suporte para aplicações em ambiente web.
[JAVA] Conexão com Oracle
Abaixo um exemplo simples para conexão Oracle em JAVA utilizando a biblioteca ojdbc14.jar (abaixo para download)
A estrutura dos arquivos estão da seguinte forma:
|Principal.java
|Ora (dir)
|-ConnectionMaker.java
|-lib (dir)
|–ojdbc14.jar
Através da classe Principal abaixo, importamos a classe Connection da bibliteca Java para fazer a instanciação de um objeto Connection e dar início a conexão Oracle. Importamos também, na linha 2, a classe em si que garante a conexão com o banco.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import java.sql.Connection; import ora.ConnectionMaker; public class Principal{ public static void main(String args[]){ try { ConnectionMaker conn = new ConnectionMaker(); Connection con1 = conn.getInstance("user", "password", "banco", "host"); //String user, String password, String sid, String url System.out.println("Conectou!"); con1.close(); System.out.println(""); System.out.println("Fechou conexão!"); } catch(Exception ex) { ex.printStackTrace(); } } } |
Confira abaixo como fica a classe ConnectionMaker para concretizar a conexão (atenção com a package, veja mais aqui). Veja a linha 5, aqui importamos a biblioteca ojdbc14.jar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package ora; import java.sql.Connection; import java.sql.DriverManager; import oracle.jdbc.driver.OracleDriver; public class ConnectionMaker { public static Connection getInstance(String user, String password, String sid, String url) throws Exception { DriverManager.registerDriver(new OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@" + url + ":1521:" + sid, user, password); conn.setAutoCommit(false); return conn; } public static Connection getInstance(String user, String password, String sid) throws Exception { return getInstance(user, password, sid, "localhost"); } } |
Para que seu programa funciona com sucesso, defina a váriavel de ambiente CLASSPATH de nossa biblioteca ojdbc14.jar. Vai ficar mais ou menos assim, dependendo onde descompactou os arquivos:
set classpath=D:\caminho\subdir\subdir\subdir\ojdbc14.jar;
Cuidado para não substituir a CLASSPATH existente, insira o já existente na mesma linha separando por ponto e vírgua (;).
Faça download da biblioteca de conexão Oracle incluindo exemplos.
Participação de Luiz Claudio – Londrina/PR que me indicou a classe ConnectionMaker e a biblioteca ojdbc14.jar.