terça-feira, 5 de novembro de 2013

Estrutura BEGIN/END no PL/SQL

Para atualizações dinâmicas com select no PL/SQL são utilizados estruturas com BEGIN/END. Segue o formato padrão:


  1. -- Created on 05/11/2013 by BOAH
  2. DECLARE
  3.   -- Local variables here
  4.   i INTEGER;
  5. BEGIN
  6.   -- Test statements here
  7.   FOR i IN (SELECT * FROM torder) LOOP
  8.     UPDATE.... WHERE tu_id=i.id
  9.     DELETE....  WHERE tu_id=i.id
  10.     DBMS_OUTPUT.put_line('Atualizado: '|| i.id)--print result
  11.   END LOOP;
  12. END;

sexta-feira, 25 de outubro de 2013

Massacrando no Terminal do Linux

Durante minha experiência de trabalho na Levier, tive a oportunidade de trabalhar com uma profissional de ponta. A Karina é uma analista/programadora daquelas de tirar o chapéu, se eu não tivesse visto a velocidade com que ela opera um terminal linux provavelmente não acreditaria. Durante uma atualização via script sh (shell) no cliente fizemos um acompanhamento para evitar erros no cliente. Durante essa operação era feito um ssh para acessar o servidor de testes(IP.11) e produção(IP.9) e do servidor de produção um ssh para o servidor do cliente case houvesse problemas. O acompanhamento era feito por um team viewer direto na máquina do cliente enquanto ele rodava o script.
Durante a operação verificamos uma atualização falha devido a um script mais antigo ter sido rodado. Para corrigir a falha foi necessário comparar todos os arquivos de todas as pastas. No terminal shell do Linux isso pode ser feito rapidamente com um comando. Além das comparações de pastas foram comparados arquivos para verificar as diferenças usando comando diff, acesso mysql pelo terminal, e, além disso, alguns arquivos foram editados on line por editores como vi, nano e pico no próprio terminal. Outros arquivos foram copiados diretamente via scp, pois como haviam problemas o cliente liberou o acesso. Uma hora depois haviam sido corrigidos em torno de 35 arquivos. A base do cliente foi compactada pelo próprio terminal e copiada para o nosso servidor via scp. Segue, agora alguns dos comandos utilizados durante a operação.

Comparação de arquivos:
  1. diff arquivo1 arquivo2

Criar um arquivo com as diferenças:
  1. diff arquivo1 arquivo2 >> diferencas.txt

Busca por palavra chave em arquivos dentro de pastas e subpastas:
  1. grep -R 'palavra' pasta/ | more

Compara todas as pastas:
  1. diff -qrbw

O -bw ignora espaços em branco (white) e linhas (b).

Para usar o editor vi:
  1. vi nome_arquivo

Para usar o editor nano:
  1. nano nome_arquivo

Para usar o editor pico:
  1. pico nome_arquivo

Acesso ao Banco de Dados
  1. mysql -uroot -p

O -u indica o usuário e o root é o nome do usuário que pode ser substituído por outro usuário ativo. O -p é a senha é possivel colocar a senha diretamente ao lado do -p como é feito com o usuário mas como o comando ficará armazenado em history não é indicado.

Para mostrar as bases ativas:
  1. show database

Para acessar uma das bases:
  1. use nome_db

Para rodar um script sql diretamente no terminal linux antes de acessar a base:
  1. mysql nome_db --user=marcelo -p < script.sql

mysql import => também pode ser usado para importação

Para criar um back up do banco remoto:
  1. mysqldump nome_db > back_up.sql

Para acompanhar o mysqldump:
-c => gera sql (insert completo)
-t => no create
-d => esqueleto do banco

Outra opção seria:
  1. mysqldump -u[usuario] -p[senha] nome_db > back_up.sql

Compactar o arquivo
  1. tar -fvzx back_up.sql

Copia remota:
  1. scp root@200.195.161.50:/home/usuario/cliente/arquivo.tgz

O IP nesse caso era um IP externo. O inicio 200.195 indica uma máquina dentro do território brasileiro.





Outros comandos que utilizei para desenvolvimento:
Para baixar projeto do svn:
  1. svn co http://ip/pasta/projeto

Para evitar conflitos de desenvolvimento no Netbeans é necessário apagar arquivos do controle do svn:
  1. rm -rf pasta/projeto/nbproject

Mudar permissões de usuário para pasta e subpastas:
  1. chmod -R 777 pasta/

Para mudar o dono da pasta:
  1. chown -R novo_usuario pasta/







segunda-feira, 31 de dezembro de 2012

Listar Arquivos com Java

Bom, já faz alguns meses que não faço post para o Blog em virtude do término da faculdade e entregas de trabalhos, apresentações finais de TCC e documentação fora as provas. Então peço desculpas a todos.

No post de hoje um programa simples para listar arquivos em um diretório, a função não é recursiva portanto o diretório tem que ser específico. Estou trabalhando em um projeto e na parte de deploy são necessárias as libs e ao invés de capturar nome por nome é mais fácil listá-las em um programa. Tentei pelo MS-DOS mas a cópia não foi possível. Como sempre perdemos tempo nestas questões simples. Então, segue o programa em Java para facilitar o próximo trabalho.




  1. import java.io.File;
  2.  
  3.  
  4. public class ListaArquivos {
  5.  
  6.         public static void main(String[] args) {
  7.  
  8.                 String dir = "C:\\Users\\marcelo\\workspaceHelios\\Monitoring1_3\\WebContent\\WEB-INF\\lib";
  9.  
  10.                 File diretorio = new File(dir);
  11.                 File fList[] = diretorio.listFiles();
  12.  
  13.                 System.out.println("Numero de arquivos no diretorio : " + fList.length );
  14.  
  15.                 for ( int i = 0; i < fList.length; i++ ){
  16.                         System.out.println(fList[i].getName() );
  17.                 }
  18.                
  19.         }
  20.  
  21. }

quarta-feira, 10 de outubro de 2012

eSpeak - Fazendo seu Computador Falar

Hoje, testei o programa eSpeak e achei bem interessante. O aplicativo permite que textos sejam digitados ou, capturados de arquivos e transformados em fonemas/frases audíveis. A aplicação pode ser bem interessante para a área de automação, para exibir avisos como: "esteira ligada", "chave um desligada", etc..

O programa roda no Windows também, mas acredito que, o forte seja utilizar através de linha de comando Shell no Linux ou, evocando por outras linguagens como Java. O programa funciona em vários idiomas, porém, a voz ainda é um pouco metalizada.


Para instalar utilize a linha de comando:
sudo apt-get install espeak

Para testar (em inglês):
espeak "hello world"

Para utilizar em português:
espeak -v pt "esteira ligada"


Segue o manual:
http://espeak.sourceforge.net/

quinta-feira, 27 de setembro de 2012

Capturar a Hora do Sistema em Java

Sempre que é necessário trabalhar com data e hora em Java acabamos perdendo um tempo. No site do Jardel Morais encontrei os melhores exemplos para captura de data e hora do sistema. Antes vou salientar algo básico sobre tipo de dados em Java:

Date = se refere sempre ao dia, mês e ano.
Time = se refere sempre a hora, minuto e segundo.
Timestamp = Date + Time.

Segue o tutorial, referencia:


  1. 1ª FORMA
  2. SimpleDateFormat dateFormat = new SimpleDateFormat(“dd/MM/yyyy – hh:mm:ss”);
  3. System.out.println(“Hoje é: “ + dateFormat.format( new Date() ));
  4. 2ª FORMA
  5.  
  6. String data = (new java.text.SimpleDateFormat(“dd/MM/yyyy”).format(newjava.util.Date(System.currentTimeMillis()));
  7. 3ª FORMA (GregorianCalendar)
  8.  
  9. public String getHora() {
  10. // cria um StringBuilder
  11. StringBuilder sb = new StringBuilder();
  12. // cria um GregorianCalendar que vai conter a hora atual
  13. GregorianCalendar d = new GregorianCalendar();
  14. // anexa do StringBuilder os dados da hora
  15. sb.append( d.get( GregorianCalendar.HOUR_OF_DAY ) );
  16. sb.append( ”:” );
  17. sb.append( d.get( GregorianCalendar.MINUTE ) );
  18. sb.append( ”:” );
  19. sb.append( d.get( GregorianCalendar.SECOND ) );
  20. // retorna a String do StringBuilder
  21. return sb.toString();
  22. }
  23. 4ª FORMA
  24. String text = ”22/08/2007;
  25. String format = ”dd/MM/yyyy”;
  26. Date date = new SimpleDateFormat(format).parse(text);
  27. 5ª FORMA
  28. System.currentTimeMillis()
  29. 6ª FORMA
  30. new Thread() {
  31. public void run() {
  32. while (true) {
  33. Date date = new Date();
  34. // usa a data pra alguma coisa
  35. try {
  36. Thread.sleep(1000); // espera um segundo
  37. } catch (InterruptedException exc) {
  38. exc.printStackTrace();
  39. }
  40. }
  41. }
  42. }.start();
  43. 7ª FORMA
  44. <!– Script para pegar e tratar a data e a hora do sistema –>
  45. <script language=”JavaScript”>
  46. <!
  47. function Hoje() {
  48. ContrRelogio = setTimeout (“Hoje()”, 1000)
  49. Hr = new Date()
  50. dd = Hr.getDate()
  51. mm = Hr.getMonth() + 1
  52. aa = Hr.getYear()
  53. hh = Hr.getHours()
  54. min = Hr.getMinutes()
  55. seg = Hr.getSeconds()
  56. DataAtual = ((dd < 10) ? “0″ + dd + “/” : dd + “/)
  57. DataAtual += ((mm < 10) ? “0″ + mm + “/” + aa : mm + “/” + aa)
  58. HoraAtual = ((hh < 10) ? “0″ + hh + “:” : hh + “:)
  59. HoraAtual += ((min < 10) ? “0″ + min + “:” : min + “:)
  60. HoraAtual += ((seg < 10) ? “0″ + seg : seg)
  61. document.atendimento.dt_slct.value=DataAtual
  62. document.atendimento.hr_ini_slct.value=HoraAtual
  63. }
  64. //
  65. function CriaArray (n) {
  66. this.length = n }
  67. //
  68. NomeDia = new CriaArray(7)
  69. NomeDia[0] = “Domingo”
  70. NomeDia[1] = “Segunda”
  71. NomeDia[2] = “Terça”
  72. NomeDia[3] = “Quarta”
  73. NomeDia[4] = “Quinta”
  74. NomeDia[5] = “Sexta”
  75. NomeDia[6] = “Sábado”
  76. //
  77. NomeMes = new CriaArray(12)
  78. NomeMes[0] = “Janeiro”
  79. NomeMes[1] = “Fevereiro”
  80. NomeMes[2] = “Março”
  81. NomeMes[3] = “Abril”
  82. NomeMes[4] = “Maio”
  83. NomeMes[5] = “Junho”
  84. NomeMes[6] = “Julho”
  85. NomeMes[7] = “Agosto”
  86. NomeMes[8] = “Setembro”
  87. NomeMes[9] = “Outubro”
  88. NomeMes[10] = “Novembro”
  89. NomeMes[11] = “Dezembro”
  90. //
  91. Data1 = new Date()
  92. dia = Data1.getDate()
  93. dias = Data1.getDay()
  94. mes = Data1.getMonth()
  95. ano = Data1.getYear()
  96. //–>
  97. </script>
  98.  
  99. 8ª FORMA
  100. Calendar.getInstance();
  101.  
  102. 9ª FORMA
  103. new Date();
  104.  
  105. 10ª FORMA
  106. import java.util.Date;
  107. import java.text.DateFormat;
  108. import java.text.SimpleDateFormat;
  109. private String getDateTime() {
  110. DateFormat dateFormat = new SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”);
  111. Date date = new Date();
  112. return dateFormat.format(date);
  113. }
  114.  
  115. 11ª FORMA (Timestamp)
  116. objLogUpdate.setData_atualizacao(new Timestamp(System.currentTimeMillis()));
  117.  
  118. 12ª FORMA (Date())
  119. java.util.Date dataAlteracao = new java.util.Date();
  120. usuario.setDataAlteracao(dataAlteracao);