Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Conexión a Oracle Responder al tema
Nuevo tema


Página 1 de 1  [ 2 mensajes ] 
 
Nota 2012-01-10 14:46 @657

Perlero Nuevo
Registrado: 2010-10-17 17:53 @786
Ubicación: Chile
Mensajes: 38
Conexión a Oracle
Estimados,

Junto con saludarlos, necesito realizarles la siguiente consulta.

Estoy programando un script en Perl que se conecta a una BD Oracle y retorna un número entero. Este número entero lo comparo con un valor X, y si pasa el umbral establecido envío una alerta a través de correo electrónico.

Mi problema es que el código es muy poco profesional. Necesito saber cómo poder realizar de mejor forma la conexión a la base de datos para traer el valor que retorna, como también si hay alguna forma de capturar los errores de conexión y guardarlos en una variable para que estos también puedan ser enviados por correo.

Les comento que mi código sí funciona, pero cuando la base de datos está caída el script no detecta esto.

Adjunto el código que he realizado:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!C:\Perl\bin\perl.exe -w
  2. #Transacciones
  3. use MIME::Lite;
  4. use strict;
  5. use POSIX 'strftime';
  6. my $alerta;
  7. my $fecha = strftime "%d-%m-%Y %H:%M:%S", localtime;
  8. my $var;
  9. my $valor;
  10.  
  11. $valor=`sqlplus -S usuario/pass\@tnsname \@F:\\QRY/consulta.sql`;
  12. $var= $valor + 0;
  13.  
  14. my $message = MIME::Lite->new(
  15.         From    => 'correo@gmail.com',
  16.         To      => 'correo1@gmail.com',
  17.         Subject => "DIF MIN REPLICA",
  18.         Data    => "Minutos de desfase entre hora actual y hora de ultima transacción en réplica: ".$var." Minutos",
  19. );
  20.        
  21. MIME::Lite->send('smtp','server_correo',Timeout=>60);
  22.  
  23. if($var >= 12)
  24. {
  25.    $message->send();
  26.    open(LECTURA,">>/LOG/ARGENTINA/DIF_MIN_REPLICA.csv");
  27.    print LECTURA $fecha." ; ".$var." ; CRITICAL \n";
  28.    close(LECTURA);
  29. }
  30. else
  31. {
  32.  if($var < 12)
  33.  {
  34.    open(LECTURA,">>/LOG/ARGENTINA/DIF_MIN_REPLICA.csv");
  35.    print LECTURA $fecha." ; ".$var." ; OK \n";
  36.    close(LECTURA);
  37.  }
  38.  else
  39.  {
  40.    open(LECTURA,">>/LOG/ARGENTINA/DIF_MIN_REPLICA.csv");
  41.    print LECTURA $fecha." ; NULL ; CRITICAL \n";
  42.    close(LECTURA);
  43.  }
  44. }
  45.  


Nota 2012-01-10 15:26 @685
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Conexión a Oracle
La forma profesional de hacerlo es usando DBI, pero tendrás que asegurarte que tienes instalado DBD::Oracle, y esto último es bastante complicado... si se hace a mano.

En las instalaciones Oracle, suele venir un directorio con un Perl propio, y con ese módulo ya compilado, así que entonces no hay que hacer ninguna instalación. Casi siempre ese Perl es muy viejo, pero para hacer consultas a la base de datos, es más que suficiente.

Según el propio README.win32.txt, la forma más cómoda es usando el PPM de ActiveState. O bajar las fuentes por el mismo medio y compilarlas (también comentado en el txt).

Presta atención a la combinación versión_de_tu_Perl / Sistema_operativo / versión_de_Oracle. No todas las combinaciones funcionan.

Si lo consigues, tendrás acceso a las centenares de funciones que DBI+DBD::Oracle te ofrecen, entre ellas, las que solicitas en tu pregunta.

Más información (en inglés) en la página Perl del Oracle Wiki.

Buena suerte...

(Después de todo esto, no me extraña que la gente prefiera usar MySQL o MariaDB o PostgreSQL)

En cuanto al código, se puede simplificar un poco.
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!C:\Perl\bin\perl.exe
  2. # Transacciones
  3. use strict;
  4. use warnings;
  5. use MIME::Lite;
  6. use POSIX 'strftime';
  7.  
  8. my $fecha   = strftime "%d-%m-%Y %H:%M:%S", localtime;
  9. my $valor   = 0 + qx(sqlplus -S usuario/pass\@tnsname \@F:\\QRY/consulta.sql);
  10.  
  11. open(LECTURA, '>>/LOG/ARGENTINA/DIF_MIN_REPLICA.csv');
  12.  
  13. if ($valor >= 12) {
  14.     my $message = MIME::Lite->new(
  15.         From    => 'correo@gmail.com',
  16.         To      => 'correo1@gmail.com',
  17.         Subject => 'DIF MIN REPLICA',
  18.         Data    => "Minutos de desfase entre hora actual y hora de ultima transacción en réplica: $var minutos",
  19.     );
  20.  
  21.     MIME::Lite->send('smtp', 'server_correo', Timeout => 60);
  22.     $message->send();
  23.  
  24.     print LECTURA "$fecha ; $valor ; CRITICAL \n";
  25. }
  26. else {
  27.    print LECTURA "$fecha ; $valor ; OK \n";
  28. }
  29.  
  30. close(LECTURA);

_________________
JF^D Perl programming


Responder al tema  [ 2 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO