Página 1 de 1

Comparar variables en tablas de BD

NotaPublicado: 2011-11-23 12:43 @572
por thegame
Hola, estoy aquí porque necesito ayuda de Uds. Tengo una variable que necesito comparar en varias tablas de una BD... es decir, en la variable tengo una palabra que necesito que las busque en unas tablas (usuario, sede, etc), pero no sé cómo hacerlo. Intenté haciendo con Perl un if(), pero no me busca en las tablas.

También con un case pero no sé cómo hacer en el case que si no encuentra en un tabla busque en la otra, es decir, me haga un print() encuentre o no en la tabla... Por favor, si me pueden decir más o menos cómo se hace.

Gracias.

Re: Comparar variables en tablas de BD

NotaPublicado: 2011-11-23 15:47 @699
por explorer
¿No puedes poner algo del código que tienes hecho?

Re: Comparar variables en tablas de BD

NotaPublicado: 2011-11-23 16:17 @720
por thegame
Esto fue lo último que intenté con un Switch/Case.... lo que quiero es que esa variable pase por las tablas, cuando consiga una igual se la traiga y luego la mostraré, y sino está en la tabla que pase a la siguiente.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub Min {
  2.     my $dbh = DBI->connect( "DBI:Pg:dbname=directorio;host=10.16.105.174;port=5432" . "directorio",
  3.         "directorio", "directorio" );
  4.     my $sth = $dbh->prepare("SELECT name FROM institucion WHERE name=?");
  5.     $sth->execute( $obj->{traerinfo} );
  6.     @row1 = $sth->fetchrow_array;
  7.     return \@row1;
  8. }
  9.  
  10. sub Nombre {
  11.     my $dbh = DBI->connect( "DBI:Pg:dbname=directorio;host=10.16.105.174;port=5432" . "directorio",
  12.         "directorio", "directorio" );
  13.     my $sth = $dbh->prepare("SELECT first_name FROM customer_user WHERE first_name=?");
  14.     $sth->execute( $obj->{traerinfo} );
  15.     @row1 = $sth->fetchrow_array;
  16.     return \@row1;
  17. }
  18.  
  19. sub traerinfo {
  20.     $obj = shift;
  21.     $obj->{traerinfo} = shift if @_;
  22.     my @row1;
  23.  
  24.     switch ( $obj->{traerinfo} ) {
  25.         case ( \&Min )    { print "@row1,Es un Ministerio" }
  26.         case ( \&Nombre ) { print "@row1, Es un Nombre" }
  27.     }
  28.  
  29. }
  30.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Re: Comparar variables en tablas de BD

NotaPublicado: 2011-11-23 18:55 @830
por explorer
Yo veo que @row1 está declarada dentro de la subrutina traerinfo().

Juraría que debería estar declarada fuera de las subrutinas, para que sean conocidas por todas. Me suena que hay una excepción al caso, pero no me acuerdo de cuál era.

Pues eso... la línea 22 debería estar en la línea 1 (antes de).

Por otra parte, no uses el módulo Switch. Está lleno de errores. Tantos, que ha sido eliminado de los últimas distribuciones de Perl. Es mejor usar el given/when que existe a partir de Perl v5.10.

Se podría hacer así, también:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $dbh = DBI->connect(
  2.     "DBI:Pg:dbname=directorio;host=10.16.105.174;port=5432",
  3.     "usuario", "contraseña",
  4. );
  5.  
  6. my @tablas = qw(institucion customer_user);    # nombres de las tablas
  7. my @campos = qw(name        first_name   );    # campos dentro de esas tablas
  8.  
  9. my $buscamos = 'Pedro';
  10.  
  11. for(my $i = 0; $i < @tablas; $i++) {           # para todas las tablas...
  12.  
  13.     my $sth = $dbh->prepare("SELECT $campos[$i] FROM $tablas[$i] WHERE $campos[$i]=?");
  14.  
  15.     $sth->execute( $buscamos );
  16.  
  17.     my @row = $sth->fetchrow_array;
  18.  
  19.     if (@row) {
  20.         print "Resultado: [@row] en $tablas[$i].\n";
  21.         last;                                   # salimos del bucle for()
  22.     }
  23. }
  24.  
  25. print "Fin de la búsqueda de [$buscamos].\n";
  26.  
  27.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Comparar variables en tablas de BD

NotaPublicado: 2011-11-24 08:56 @414
por thegame
Gracias, me sirvió.