• Publicidad

Consulta desde script

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Consulta desde script

Notapor reLlene » 2012-07-27 19:38 @860

Estoy tratando con una tabla llamada formaaant que contiene los campos 'formaactual' y 'formaanterior'. Ambos campos son foreign keys (claves foráneas) de la única clave primaria (rid) de la tabla forma. Dibujo un poco la situación a continuación para que se entienda mejor:

Imagen

Imagen


ACLARACIÓN: aquellos registros que no se encuentran en formaant, significa que NUNCA han cambiado su forma o al menos, de momento.

Lo que deseo es hacer un script que a la hora de tomar cualquier forma (ya sea f2, g3, z6, etc.) de la tabla formaant, ¡¡logré enterarme cuál es su correspondiente forma1 (vamos, su forma madre), me refiero a (f1, g1, z1 -siguiendo el mismo orden-)!!

Estuve leyendo de "expresiones de tabla común o cte", donde se puede hacer consultas recursivas pero ya depende del motor de la base ¡¡y es un lío!! :?

¿¿Alguien me echa un cable?? :?
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Publicidad

Re: Consulta desde script

Notapor explorer » 2012-07-28 20:11 @883

Creo que el siguiente ejemplo lo puede resolver.

En lugar de consultas a base de datos, he usado hash, que es casi lo mismo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2.  
  3. my %formaant = (
  4.     3301 => 99,
  5.     5564 => 3301,
  6.     6755 => 5564,
  7.     154  => 101,
  8.     2500 => 199,
  9.     3564 => 2500,
  10. );
  11.  
  12. my %forma = (
  13.     99   => 'blabla',
  14.     1500 => 'asdasf',
  15.     1686 => 'adafsf',
  16.     3301 => 'fdsf',
  17.     3658 => 'fsghgr',
  18.     5564 => 'vxvx',
  19.     6755 => 'vsvs',
  20.     101  => 'sdf',
  21.     154  => 'wfwr',
  22.     189  => 'fgf',
  23.     199  => 'nvbn',
  24.     2500 => 'hkjuhk',
  25.     3564 => 'opiuytre',
  26. );
  27.  
  28. while (1) {
  29.     print "Forma inicial a buscar (fin para terminar):";
  30.     my $forma_a_buscar = <>;
  31.     chomp $forma_a_buscar;
  32.     last if $forma_a_buscar eq 'fin';
  33.  
  34.     for my $rid (keys %forma) {                         # buscamos el rid correspondiente      
  35.         if ($forma{$rid} eq $forma_a_buscar) {
  36.  
  37.             # Hemos encontrado un rid correspondiente a la forma inicial
  38.  
  39.             # Ahora buscamos la forma original
  40.             while (exists $formaant{$rid}) {            # mientras exista una forma anterior
  41.                 $rid = $formaant{$rid};                 # obtenemos el nuevo rid de esa forma anterior
  42.             }
  43.  
  44.             print "Forma original: $forma{$rid}\n";
  45.             last;
  46.         }
  47.     }
  48. }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Ejemplo de la salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@hs-1059:~/Desarrollo$ ./kk.pl
  2. Forma inicial a buscar (fin para terminar):vsvs
  3. Forma original: blabla
  4. Forma inicial a buscar (fin para terminar):wfwr
  5. Forma original: sdf
  6. Forma inicial a buscar (fin para terminar):blabla
  7. Forma original: blabla
  8. Forma inicial a buscar (fin para terminar):hkjuhk
  9. Forma original: nvbn
  10. Forma inicial a buscar (fin para terminar):fin
  11.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Consulta desde script

Notapor reLlene » 2012-07-29 18:21 @806

¡¡explorer, resulta de perlas!! Pero... si trabajo de esta forma, me refiero al tratar ambas tablas como hashes, teniendo en cuenta que son muchísimos registros, no debería de tener problemas, ¿cierto? :?

Por cierto el /env perl sé que lleva una relación directa con la variable de entorno sino corríjeme pero corrí el script con el simple /perl y ¡¡obtuve el mismo resultado!! ¿En este caso lo has acotado por alguna cuestión ajena?
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: Consulta desde script

Notapor explorer » 2012-07-29 19:07 @838

reLlene escribiste:¡¡explorer, resulta de perlas!! Pero... si trabajo de esta forma, me refiero al tratar ambas tablas como hashes, teniendo en cuenta que son muchísimos registros, no debería de tener problemas, ¿cierto? :?
Depende de la cantidad de memoria que tengas en el ordenador.

reLlene escribiste:Por cierto el /env perl sé que lleva una relación directa con la variable de entorno sino corríjeme pero corrí el script con el simple /perl y ¡¡obtuve el mismo resultado!! ¿En este caso lo has acotado por alguna cuestión ajena?
Es la forma recomendada de ejecutar perl: en vez de poner una ruta absoluta, le pedimos al programa env que lo busque.

De esta manera, si en el futuro ejecutamos el programa en otro ordenador, que tenga Perl instalado en un directorio distinto, no tendremos que abrirlo y editarlo.

Esto es fundamental, además, cuando se usan instalaciones locales de distintas versiones de Perl, o cuando un usuario quiere usar una versión de Perl distinta de la del sistema, todo ello con la ayuda del genial perlbrew.

Otro tema es si aún estás en Windows, que entonces dependes de la configuración del sistema, ya que entonces la línea '#!' no es más que un simple comentario. Puedes hacer la prueba cambiando la primera línea por '#Perl', o cualquier otro texto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Consulta desde script

Notapor reLlene » 2012-07-29 19:22 @849

Gracias por la aclaración, recién me entero de ello.

Por cierto, no cuento con mucha memoria en la máquina del trabajo y tampoco me encuentro allí como para hacer la prueba ¡je,je! pero resulta que la idea no deja de ser la misma. Es esa información (forma de origen) que debo de ir a buscar en la tabla formaant y que me tiene que devolver la primera de sus formas... En la tabla forma yo puse solamente el campo descripción a modo de no complicar mucho la idea pero en realidad cuenta con muchos otros y lo que necesito es que me muestre el contenido de TODOS esos campos, es decir todo ese registro, una vez que me ENTERO que se trata de la forma origen.

Los hashes, no me queda otra que cargarlos uno por uno, me refiero: ¿a mano? CADA uno e incluso, si llega a sufrir una modificación la tabla formaant, una actualización supongamos, ¿debería de editar NUEVAMENTE el hash?? :?
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: Consulta desde script

Notapor explorer » 2012-07-29 19:53 @870

A mano, no... A máquina... hay que sustituir la parte del programa que crea los hash por un par de consultas a la base de datos, y crear los hash a partir de esas consultas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Consulta desde script

Notapor reLlene » 2012-07-29 22:06 @962

hummm... ¿me podrías dar alguna mano?

Intuyo que con algún

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while (readline TABLA) {                      # while <TABLA>
  2.  
  3.    
  4. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero ya escapa de mi noción :?
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: Consulta desde script

Notapor explorer » 2012-07-30 10:04 @461

En este sitio web hay algún manual al respecto de cómo hacer consultas a base de datos (mira la sección Tutoriales, arriba del todo).

Además, por estos foros hay muchos ejemplos de acceso a base de datos y de lectura de los resultados de la consulta a una tabla hash.

Es más, usando el módulo DBI, tienes una función llamada selectall_hashref() que devuelve toda la consulta en una referencia a un hash, así que lo tendrías todo resuelto en un par de líneas.

Por ejemplo, Ordenar hash DBI::selectall_hashref
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado