From ait at linuxmail.org Fri Apr 4 20:07:06 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Exclusi=F3n de una funci=F3n cargada en un require?= Message-ID: <20030405020706.27704.qmail@linuxmail.org> Como se eliminan subs que han sido importadas en el namespace actual en Perl? El script (de sql-ledger) que estoy modificando tiene la siguiente estructura: -------------------------------------- use SL::IC; require "$form->{path}/io.pl"; 1; # end of main sub print_options { ...... } --------------------------------------- En el ejemplo arriba print_options es una funci?n que yo escrib? en el archivo local, pero en el incluido en el require (io.pl) ya estaba incluida esta funci?n por lo cual la m?a nunca es llamada. Me d? curiosidad porque listo todos los keys de %:: y no veo las dos (la m?a y la de io.pl). Si comento el require veo la m?a. Como funciona esto en Perl?? Como se puede ver el script realmente termina antes de la definici?n del sub por lo cual %:: no deber?a reflejar ninguno de los m?todos locales o si? Le? perlmod, perlsub, perlref, perlreftut, Exporter, etc. y me parece mentira pero no hay una secci?n de como anular m?todos. Aunque hago varias interrogantes realmente es una sola pregunta y supongo que hay una respuesta simple, pero si me pueden expandir en las otras interrogantes ser?a genial. Gracias, Alejandro Imass -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Mon Apr 7 09:47:43 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: [l-desarrollo] =?iso-8859-1?Q?Anular una funci=F3n en Perl?= In-Reply-To: <20030407022317.3668.qmail@linuxmail.org> Message-ID: On Mon, 7 Apr 2003, Alejandro Imass wrote: > Quiero redefinir un mitodo (funcisn, sub) que ha sido inclumdo mediante > require. Hay que tomar en cuenta que es un pl y no un pm por lo que no > se puede usar use y excluir los mitodos con ! Un m?todo es diferente a una funci?n/subrutina. Un m?todo est? asociado a un espacio de nombres _diferente_ al del programa principal. > El script comienza asm: > > require "$form->{path}/io.pl"; > #undef &print_options; Un require es sem?nticamente equivalente a un #include. ?C?mo har?as en C? para "tapar" fopen() con tu propio fopen() si tienes un #include ? Exacto, no puedes a menos que quites stdio.h. > sub print_options { > ... > > } > > El problema es que print_options ya esta definido en io.pl y yo quiero > anular este mitodo por el que estoy redefiniendo localmente en el script. No es un m?todo a menos que venga en un package. Para poder hacer importado selectivo de nombres de un espacio a otro, es obligatorio tener un package definido y cargarlo con use; es m?s, es conveniente que el package sea un Exporter. No obstante... y de una manera vomitiva y por dem?s destructiva de todo lo que es bueno y hermoso acerca de la programaci?n, puedes hacer esto En p.pl #!/usr/bin/perl sub foo { print "Foo!\n"; } return 42; y en m.pl #!/usr/bin/perl require "p.pl"; sub bar { print "Bar!\n"; } foo(); # Imprime Foo! por p.pl { local *foo = \&bar; # Masajeas el espacio de nombres foo(); # Imprime Bar! por m.pl } foo(); # Imprime Foo! nuevamente por p.pl *foo = \&bar; # Masajeas el espacio de nombres y pierdes foo foo(); # Imprime Bar! nuevamente por m.pl Y en efecto "tapaste" foo de p.pl con bar de m.pl; no necesariamente de forma "irrecuperable", porque siempre puedes hacer un bloque an?nimo con localizaci?n del nombre como ilustre en la segunda parte del programa. Ahora bien, esto es una _asquerosidad_ y estoy preparado para negar en una corte que suger? tal proceder; y si alguien presenta este mensaje como evidencia aducir? demencia temporal producto de tener que interactuar con programadores de Visual Basic . -- Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Mon Apr 7 11:30:40 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Re: [l-desarrollo] Anular una funci=F3n en Perl?= Message-ID: <20030407163041.1274.qmail@linuxmail.org> Gracias por alegrarme la ma?ana! Como s? que te interesa Sql-Ledger te comento: En efecto, el problema principal es la forma en que Dieter Simader (el autor de Sql-Ledger) hizo este include. A veces el c?digo de SL es un poco monol?tico y espaguetoso sobretodo en el fron-end (los .pl); su concepto de reutilizaci?n es m?s bien de flojo algunas veces. Los m?dulos de SL si son mucho m?s consistentes pero m?s que todo son librer?as. El ?nico ?mpliamente reutilizado como tal es el m?dulo Form.pm, una especie de CGI.pm que usa una abstracci?n interesante para las formas. La implementaci?n de la forma, no obstante, es manejada por los scripts de front-end con prints y qq [1]. Mi ambig?edad con el t?mino ``m?todo'' es justamente por el arroz con mango que hay en SL a veces (y que Perl amablemente permite). Tienes toda la raz?n sobre que los m?todos deber?an estar en espacio de nombres distintos pero a?n ignoro como lo maneja Perl, como te puedes dar cuenta, no he estudiado mucho los objetos en Perl. En f?n, te cuento todo esto porque es el trasfondo de mi pregunta. Estoy tan solo agregando capacidades impresi?n a la lista de materiales en SL (lista de precios y conteo f?sico de inventario), tratando de tocar lo menos posible el c?digo original. Lo tengo funcionando hace tiempo con funciones que tienen otros nombres locales como lprint_options y lprint, pero quer?a saber si hab?a alguna forma de hacerlo m?s bonito con el mismo nombre que se usa en otros m?dulos. Pens? que como el undef de Perl era bastante selectivo pod?a eliminarla antes y despu?s redefinirla. Lo m?s triste es que no se utiliza mucho de io.pl de todas formas en ic.pl. Tengo entendido que hay unos est?ndares como usar may?sculas o un underscore. Sabes algo al respecto? Gracias y Saludos Cordiales, ait [1] En estos d?as reescrib? por completo, usando formalmente CGI.pm, un programita que le hab?a hecho a mi pap? para calcular sus caballos. Despu?s de conocer CGI.pm, he quedado muy contento e impresionado con lo limpio que se puede programar aplicaciones CGI con ella. De verdad estoy muy emocionado. Hasta ahora hab?a hecho mis aplicaciones con prints y con mi propia implementaci?n de css. He tirado todo eso a la basura y ma caso con CGI.pm! ----- Original Message ----- From: Ernesto Hernandez-Novich Date: Mon, 7 Apr 2003 10:47:43 -0400 (VET) To: Subject: Re: [l-desarrollo] Anular una funci?n en Perl > Un m?todo es diferente a una funci?n/subrutina. Un m?todo est? asociado > a un espacio de nombres _diferente_ al del programa principal. > -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Mon Apr 7 13:20:26 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Re: [l-desarrollo] Anular una funci=F3n en Perl?= In-Reply-To: <20030407163041.1274.qmail@linuxmail.org> Message-ID: On Tue, 8 Apr 2003, Alejandro Imass wrote: > Mi ambig?edad con el timino ``m?todo'' es justamente por el arroz con > mango que hay en SL a veces (y que Perl amablemente permite). Tienes > toda la raz?n sobre que los mitodos deberman estar en espacio de nombres > distintos pero a?n ignoro como lo maneja Perl, como te puedes dar cuenta, > no he estudiado mucho los objetos en Perl. package Foo; defiene el espacio de nombres Foo, hasta que se defina otro espacio de nombre o hasta que termine el archivo. package Foo; sub x { print "Foo!\n"; } package Bar; sub x { print "Bar!\n"; } package main; Foo::x(); Bar::x(); Declarar un package _no_ convierte el programa en orientado a objetos; simplemente declara un espacio nuevo de nombres. Ese espacio nuevo de nombres puede o no ser un Exporter; en caso afirmativo quiere decir que tienes la potestad de escoger cu?les nombres del espacio son exportados a usuarios, en caso negativo todos los nombres son exportados. Para que un package ayude en el manejo de objetos, es necesario que se construyan referencias a "algo" que hayan sido bendecidas con el nombre de la clase, que se acostumbra sea el espacio de nombres. package Foo; sub new { my $self = { prop1 => 'val1', prop2 => 'val2', ... }; bless $self,'Foo'; return $self; } package main; my $foo = new Foo; # o bien Foo->new Perl permite el encapsulamiento pero no lo impone. man perltoot -- Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Mon Apr 7 13:35:00 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Re: Re: [l-desarrollo] Anular una funci=F3n en Perl?= Message-ID: <20030407183504.3638.qmail@linuxmail.org> > > Perl permite el encapsulamiento pero no lo impone. > Oye vale, tremenda aclaratoria. Gracias. Hab?a visto lo del Exporter el f?n de semana y es super poderoso (lo de por default o por request). Gracias, ait ----- Original Message ----- From: Ernesto Hernandez-Novich Date: Mon, 7 Apr 2003 14:20:26 -0400 (VET) To: Subject: Re: Re: [l-desarrollo] Anular una funci?n en Perl > On Tue, 8 Apr 2003, Alejandro Imass wrote: > > Mi ambig?edad con el timino ``m?todo'' es justamente por el arroz con > > mango que hay en SL a veces (y que Perl amablemente permite). Tienes > > toda la raz?n sobre que los mitodos deberman estar en espacio de nombres > > distintos pero a?n ignoro como lo maneja Perl, como te puedes dar cuenta, > > no he estudiado mucho los objetos en Perl. > > package Foo; > > defiene el espacio de nombres Foo, hasta que se defina otro espacio de > nombre o hasta que termine el archivo. > > package Foo; > sub x { > print "Foo!\n"; > } > package Bar; > sub x { > print "Bar!\n"; > } > package main; > Foo::x(); > Bar::x(); > > Declarar un package _no_ convierte el programa en orientado a objetos; > simplemente declara un espacio nuevo de nombres. Ese espacio nuevo de > nombres puede o no ser un Exporter; en caso afirmativo quiere decir que > tienes la potestad de escoger cu?les nombres del espacio son exportados > a usuarios, en caso negativo todos los nombres son exportados. > > Para que un package ayude en el manejo de objetos, es necesario que se > construyan referencias a "algo" que hayan sido bendecidas con el nombre > de la clase, que se acostumbra sea el espacio de nombres. > > package Foo; > sub new { > my $self = { prop1 => 'val1', > prop2 => 'val2', ... > }; > bless $self,'Foo'; > return $self; > } > package main; > my $foo = new Foo; # o bien Foo->new > > Perl permite el encapsulamiento pero no lo impone. > > man perltoot > -- > Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! > Geek by nature, Linux by choice, Debian of course. > If you can't apt-get it, it isn't useful or doesn't exist. > GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 > ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) > > ------------------------------------------------------------------------ > Enviar e-mail a colocando en el cuerpo: > "UNSUBSCRIBE caracas-pm-list" para desuscribirse. > "INFO caracas-pm-list" para conocer las reglas de etiqueta. > ------------------------------------------------------------------------ > -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Wed Apr 9 07:20:23 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: [l-desarrollo] Problema llenando base de datos Mysql con perl. In-Reply-To: <3E935E5C.1030706@host2world.com> Message-ID: On Tue, 8 Apr 2003, Eladio Garcia wrote: > este es parte del scritp resumido [...] > use CGI qw/:standard/; > use DBI; > $dbh = > DBI->connect("DBI:mysql:base_de_datos:localhost","usaurio","pass") or > die "No se pudo conectar a la base de datos"; > $q = new CGI; > %data= $q->Vars; > if ($data{'bandera'} eq "rent") > { $db_user = "l_rent"; > $query = "INSERT INTO for_rent ( `id`, `login`, `price`, `city`, > `neighborhood`, `street`, `no`, `phone`, `email`, `baths`, `bedrooms`, > `pets`, `smoker`, `negotiable`, `terms`, `comments`, `date`) values ('', > '$data{'login'}', '$data{'phone2'}', '$data{'city'}', > '$data{'neighborhood'}', '$data{'street'}', '$data{'no'}', > '$data{'phone'}', '$data{'email'}', '$data{'baths'}', > '$data{'bedrooms'}', '$data{'pets'}', '$data{'smoke'}', > '$data{'negotiable'}', '$data{'terms'}', '$data{'comments'}' , > '0000-00-00')"; > } Primero lo primero. Esto $x = "valor para bar"; $y = "valor para baz"; $query = "insert into foo ( bar, baz ) values ( $x, $y )"; $sth = $dbh->prepare($query); $sth->execute; es _lento_, ineficiente en el uso de la memoria y doloroso para cualquier manejador de base de datos. Lo correcto es utilizar variables posicionales (bind variables) $x = "valor para bar"; $y = "valor para baz"; $query = "insert into foo ( bar, baz ) values ( ? , ? )"; $sth = $dbh->prepare($query); $sth->execute($x,$y); pues le permite al manejador analizar y optimizar el query _una_ sola vez, mantenerlo en su cache propio y simplemente sustituir las variables posicionales con diferentes valores cada vez. Haz un ejemplo simple para convencerte for (1..100_000) { my $sth = $dbh->prepare("insert into numeros ( numero ) values ( $_ )"); $sth->execute; } my $sth = $dbh->prepare("insert into numeros ( numero ) values ( ? )"); for (1..100_000) { $sth->execute($_); } y ver?s que el segundo es much?simo m?s r?pido. Revisa el manual de DBI para ver m?s ejemplos al respecto, al igual que las t?cnicas para detectar los errores. Es una buena costumbre de programaci?n verificar los valores de retorno de todas las funciones que puedan fallar, porque alguna vez van a fallar y va a interesar saber por qu?. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From eladio at host2world.com Wed Apr 9 08:19:07 2003 From: eladio at host2world.com (Eladio Garcia) Date: Wed Aug 4 23:59:36 2004 Subject: [l-desarrollo] Problema llenando base de datos Mysql con perl. References: Message-ID: <3E941DCB.7030709@host2world.com> > > > >es _lento_, ineficiente en el uso de la memoria y doloroso para >cualquier manejador de base de datos. Lo correcto es utilizar variables >posicionales (bind variables) > >$x = "valor para bar"; $y = "valor para baz"; >$query = "insert into foo ( bar, baz ) values ( ? , ? )"; >$sth = $dbh->prepare($query); >$sth->execute($x,$y); > > > OK Ernesto gracias.. :-D es bueno recibir esa clase de consejos.. sobre todo ahora que estoy empezando a desarrollar con mysql y perl.. y asi evito agarrar malas practicas... bueno ya me voy a dedicar a modificar my script.. Ahhh y ya el error estaba listo.. era que uno de los campos de la base de datos tenia un espacio delante.. por ente.. cuando polia en la lista de valores 'campo' me daba un error de campo ... ejejeje y eso lo encontre tambien a tu consejo de que $sth-do() le agregara el $sth-do() or die $sth->errstr() jejejeje gracias por todo.. -- -------------------------------------------------------------- Eladio Garcia eladio@host2world.com Linux User# 150886 - Running Kernel 2.4.18 / Windows User VENEZUELA http://www.host2world.com - Your Hosting Solution -------------------------------------------------------------- Linux: "Free your mind" - VELUG - http://www.linux.org.ve ----BEGIN GEEK CODE BLOCK------------------------------------- Version: 3.12 GE d- s: a-- C+++>$ UL++>$ P+ L++ E- W++ N(++) K- w !O !M V- PS+ !PE Y+ PGP+ t--- 5-- X R tv+ b++ DI D++ G++ e++ h! r y+ ----END GEEK CODE BLOCK------ http://www.geekcode.com -------- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Wed Apr 9 09:14:29 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: [l-desarrollo] Problema llenando base de datos Mysql con perl. Message-ID: <20030409141429.6404.qmail@linuxmail.org> Tienes raz?n si vas a reutilizar el query, pero creo que usar bind variables para queries one-off pareciera un overkill. ?es realmente m?s eficiente para una sola ejecuci?n? De cualquier manera hacer do() en un insert es indeseable y siempre se deber?a usar prepare and execute, entre otras razones, porque es la ?nica forma de obtener un identificador de registro (oid, rowid, etc.). Confiezo, sin embargo, que he usado do() muchas veces. ----- Original Message ----- From: Ernesto Hernandez-Novich Date: Wed, 9 Apr 2003 08:20:23 -0400 (VET) To: Subject: Re: [l-desarrollo] Problema llenando base de datos Mysql con perl. > > Primero lo primero. > > Esto > > $x = "valor para bar"; $y = "valor para baz"; > $query = "insert into foo ( bar, baz ) values ( $x, $y )"; > $sth = $dbh->prepare($query); > $sth->execute; > > es _lento_, ineficiente en el uso de la memoria y doloroso para > cualquier manejador de base de datos. Lo correcto es utilizar variables > posicionales (bind variables) > > $x = "valor para bar"; $y = "valor para baz"; > $query = "insert into foo ( bar, baz ) values ( ? , ? )"; > $sth = $dbh->prepare($query); > $sth->execute($x,$y); > > pues le permite al manejador analizar y optimizar el query _una_ sola > vez, mantenerlo en su cache propio y simplemente sustituir las variables > posicionales con diferentes valores cada vez. Haz un ejemplo simple para > convencerte > -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Wed Apr 9 09:14:29 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: [l-desarrollo] Problema llenando base de datos Mysql con perl. Message-ID: <20030409141429.6404.qmail@linuxmail.org> Tienes raz?n si vas a reutilizar el query, pero creo que usar bind variables para queries one-off pareciera un overkill. ?es realmente m?s eficiente para una sola ejecuci?n? De cualquier manera hacer do() en un insert es indeseable y siempre se deber?a usar prepare and execute, entre otras razones, porque es la ?nica forma de obtener un identificador de registro (oid, rowid, etc.). Confiezo, sin embargo, que he usado do() muchas veces. ----- Original Message ----- From: Ernesto Hernandez-Novich Date: Wed, 9 Apr 2003 08:20:23 -0400 (VET) To: Subject: Re: [l-desarrollo] Problema llenando base de datos Mysql con perl. > > Primero lo primero. > > Esto > > $x = "valor para bar"; $y = "valor para baz"; > $query = "insert into foo ( bar, baz ) values ( $x, $y )"; > $sth = $dbh->prepare($query); > $sth->execute; > > es _lento_, ineficiente en el uso de la memoria y doloroso para > cualquier manejador de base de datos. Lo correcto es utilizar variables > posicionales (bind variables) > > $x = "valor para bar"; $y = "valor para baz"; > $query = "insert into foo ( bar, baz ) values ( ? , ? )"; > $sth = $dbh->prepare($query); > $sth->execute($x,$y); > > pues le permite al manejador analizar y optimizar el query _una_ sola > vez, mantenerlo en su cache propio y simplemente sustituir las variables > posicionales con diferentes valores cada vez. Haz un ejemplo simple para > convencerte > -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Wed Apr 9 09:50:58 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: [l-desarrollo] Problema llenando base de datos Mysql con perl. In-Reply-To: <20030409141429.6404.qmail@linuxmail.org> Message-ID: On Wed, 9 Apr 2003, Alejandro Imass wrote: > Tienes razsn si vas a reutilizar el query, pero creo que usar > bind variables para queries one-off pareciera un overkill. ?es > realmente mas eficiente para una sola ejecucisn? Siempre. El query va a quedar preoptimizado en el cache del manejador de base de datos, con lo que cualquier _otro_ programa que haga el mismo query contra la base de datos ya tiene el beneficio de aprovechar el trabajo hecho. En bases de datos con mucha concurrencia de usuarios que repiten consultas es fundamental aprovechar ?sta propiedad. Si uno lo quiere ver desde el punto de vista de l?gica proposicional, escribir un query con bind variables es escribir una propiedad funcional que depende de un par?metro acotado, mientras que escribir un query con valores literales es escribir una instancia particular de la propiedad funcional. El primero puede ser cuantificado ("para todo query como ?ste") mientras que el segundo no ("s?lo para ?ste query espec?fico"); y una propiedad cuantificable puede aplicarse por extensi?n en cualquier contexto, precisamente lo que uno quiere cuando trabaja con bases de datos relacionales. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Wed Apr 9 15:11:46 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: Enviar correo desde Perl Message-ID: apt-get install libmailtools-perl (o instalar Mail::Mailer desde CPAN) use Mail::Mailer; eval { $m = Mail::Mailer->new("sendmail"); $m->open( { From => 'foo@bar.com', To => 'baz@qux.net', Subject => 'Como enviar e-mail desde Perl' } ); print $m <close; }; if ($@) { print "Error: $@\n"; } else { print "Mensaje enviado.\n"; } Mail::Mailer->new puede utilizarse para usar sendmail directo (como en el ejemplo) o usar SMTP contra un servidor de correo espec?fico (as? no necesitas tener un MTA en la m?quina). El uso de eval {} deriva de mi costumbre de programar defensivamente, considerando que cualquier error en Mail::Mailer resulta en un die, de manera que eval {} lo atrapar? sin morir y lo reportar? en $@. N?tese que $m es en efecto un filehandle, as? que se le puede asociar un formato, hacerle todos los prints que uno quiera, write, etc. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From fobispo at nic.ve Wed Apr 9 15:36:33 2003 From: fobispo at nic.ve (Francisco Obispo) Date: Wed Aug 4 23:59:36 2004 Subject: Enviar correo desde Perl In-Reply-To: References: Message-ID: <3E948451.2000200@nic.ve> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hola.. Yo utilizo el Mail::Sender, me parece bastante bueno, y tiene algunos metodos como SendFile para enviar attachments directamente. Saludos Ernesto Hernandez-Novich wrote: |apt-get install libmailtools-perl (o instalar Mail::Mailer desde CPAN) | |use Mail::Mailer; |eval { | $m = Mail::Mailer->new("sendmail"); | $m->open( { From => 'foo@bar.com', | To => 'baz@qux.net', | Subject => 'Como enviar e-mail desde Perl' | } ); | print $m <close; |}; |if ($@) { | print "Error: $@\n"; |} else { | print "Mensaje enviado.\n"; |} | |Mail::Mailer->new puede utilizarse para usar sendmail directo (como en |el ejemplo) o usar SMTP contra un servidor de correo espec?fico (as? no |necesitas tener un MTA en la m?quina). | |El uso de eval {} deriva de mi costumbre de programar defensivamente, |considerando que cualquier error en Mail::Mailer resulta en un die, de |manera que eval {} lo atrapar? sin morir y lo reportar? en $@. | |N?tese que $m es en efecto un filehandle, as? que se le puede asociar un |formato, hacerle todos los prints que uno quiera, write, etc. - -- __________________________________________________________________ Francisco Jose Obispo Semidey System Administrator ccTLD .VE Technical Contact - http://www.nic.ve CNTI - REACCIUN - http://www.cnti.ve Work: +58 212 709 5257 GPG Fingerprint: 23FE 02B7 2E9A 24DB 51F3 29CB 87CF 3C30 3236 D09D ___________________________________________________________________ MOTD: "An organization dries up if you don't challenge it with growth." - -- Mark Shepherd, former President and CEO of Texas Instruments -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQE+lIRQh888MDI20J0RAgPVAJ0QCdCxi3waxbjj4mCehB3ArAp28ACcCsvj mQul4PJQr+TRq/oQ0ZOO05U= =aYgb -----END PGP SIGNATURE----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Wed Apr 9 15:48:58 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: Enviar correo desde Perl In-Reply-To: <3E948451.2000200@nic.ve> Message-ID: On Wed, 9 Apr 2003, Francisco Obispo wrote: > Yo utilizo el Mail::Sender, me parece bastante bueno, y > tiene algunos metodos como SendFile para enviar attachments > directamente. Bueno, para mandar archivos multiparte prefiero MIME::Entity (apt-get install libmime-perl), que aprovecha Mail::Mailer $e = MIME::Entity->build(Type => 'multipart/mixed', From => 'foo@bar.com', To => 'baz@qux.net', Subject => 'Mensaje con anexos'); $e->attach(Type => 'text/plain', Path => '/some/file.txt'); $e->attach(Type => 'application/postscript', Path => '/some/page.ps'); $e->attach(Type => 'audio/mpeg', Path => '/some/song.mp3'); ... $e->smtpsend(Host => 'mi.mail.server'); Como igual tengo que usar encapsulado MIME para otras aplicaciones, me di? uniformidad, as? que me acostumbr? a usarlo. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Thu Apr 10 13:24:00 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?L=EDmite en conjunto de resultados con DBD::Oracle?= Message-ID: <20030410182400.1306.qmail@linuxmail.org> Estoy recorriendo un simple query a una tabla de un poco m?s de 50000 registros pero la funci?n fetchrow_hasref se detiene en el registro 3677. No d? errores ni excepciones, solo se detiene como si fuese el final del conjunto de resultados. ?El l?mite estar? en mi cliente sql-net local? No creo, porque conecto v?a sql-plus desde ese mismo cliente y veo los 50000. Hice un select count(*) y luego para descartar toda posiblidad hice un select completo y lo par? como en el registro 23000 y pico. ?Es una propiedad de DBI? Me parece extra?o pu?s nunca he experimentado esto antes. ?Es particular a DBD::Oracle? Probablemente. V? lo de la sintonizaci?n del listener pero se refer?a m?s a los tiempos de conexiones, a menos que me est? afectando el timeout? No creo porque creo que dar?a error como end-of-communication-channel, por ejemplo. He usado DBI extensamente con PostgreSql y nunca he tenido este problema. Tambi?n busqu? en Google pero no encontr? mucho. Agradecer?a cualquier sugerencia al respecto. Gracias. -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Fri Apr 11 10:41:37 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?L=EDmite en conjunto de resultados con DBD::Oracle?= In-Reply-To: <20030410182400.1306.qmail@linuxmail.org> Message-ID: On Fri, 11 Apr 2003, Alejandro Imass wrote: > Estoy recorriendo un simple query a una tabla de un poco mas de 50000 > registros pero la funcisn fetchrow_hasref se detiene en el registro 3677. > No da errores ni excepciones, solo se detiene como si fuese el final del > conjunto de resultados. > > Es particular a DBD::Oracle? Probablemente. Nunca he tenido ese problema, y con tablas bastante m?s largas y anchas. ?Qu? versi?n de Oracle est?s utilizando? -- Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From fobispo at nic.ve Fri Apr 11 11:04:31 2003 From: fobispo at nic.ve (Francisco Obispo) Date: Wed Aug 4 23:59:36 2004 Subject: =?ISO-8859-1?Q?L=EDmite_en_conjunto_de_resultados_?= =?ISO-8859-1?Q?con_DBD=3A=3AOracle?= In-Reply-To: References: Message-ID: <3E96E78F.5010704@nic.ve> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Envia adicionalmente el query que usas y asegurate que el proceso que carg? esos registros hizo commit salu2 Ernesto Hernandez-Novich wrote: |On Fri, 11 Apr 2003, Alejandro Imass wrote: | |>Estoy recorriendo un simple query a una tabla de un poco mas de 50000 |>registros pero la funcisn fetchrow_hasref se detiene en el registro 3677. |>No da errores ni excepciones, solo se detiene como si fuese el final del |>conjunto de resultados. |> |>Es particular a DBD::Oracle? Probablemente. | | |Nunca he tenido ese problema, y con tablas bastante m?s largas y anchas. | |?Qu? versi?n de Oracle est?s utilizando? - -- __________________________________________________________________ Francisco Jose Obispo Semidey System Administrator ccTLD .VE Technical Contact - http://www.nic.ve CNTI - REACCIUN - http://www.cnti.ve Work: +58 212 709 5257 GPG Fingerprint: 23FE 02B7 2E9A 24DB 51F3 29CB 87CF 3C30 3236 D09D ___________________________________________________________________ MOTD: When I met th'POPE back in '58, I scrubbed him with a MILD SOAP or DETERGENT for 15 minutes. He seemed to enjoy it ... -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQE+lueOh888MDI20J0RAsfPAKCgoj1BOEx5q92S2g9bCi1700f0owCgtdqf myrzAvhvhW1estiJ497wTio= =yrmn -----END PGP SIGNATURE----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Fri Apr 11 13:35:50 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Re: L=EDmite en conjunto de resultados con DBD::Oracle?= Message-ID: <20030411183550.31290.qmail@linuxmail.org> Oracle 8.0.5.0.0 Perl 5.6.1 DBI 1.14 DBD-Oracle 1.12 DBD-Oracle8 1.06 Una preguntica, si pongo Oracle8 en el connect string me dice que no encuentra el m?dulo aunque est? instalado con la versi?n especificada arriba. Hay otra forma expl?cita de decirle que es 8; ser? ese el problema? Snip del c?digo de prueba: $dbh = DBI->connect('dbi:Oracle:','imat', 'material') or die $DBI::errstr; $query = qq| SELECT SN, NOUN, MODIFIER FROM PARTS_MASTER |; $sth = $dbh->prepare($query); $rv = $sth->execute(); $rows=0; while(my $ref = $sth->fetchrow_hashref(NAME_lc)){ $rows++; # rows counter $sn = @$ref{'sn'}; $noun = @$ref{'noun'}; $modifier = @$ref{'modifier'}; } print $rows; $dbh->disconnect(); ----- Original Message ----- From: Ernesto Hernandez-Novich Date: Fri, 11 Apr 2003 11:41:37 -0400 (VET) To: Perl Mongers Caracas Subject: Re: L?mite en conjunto de resultados con DBD::Oracle > On Fri, 11 Apr 2003, Alejandro Imass wrote: > > Estoy recorriendo un simple query a una tabla de un poco mas de 50000 > > registros pero la funcisn fetchrow_hasref se detiene en el registro 3677. > > No da errores ni excepciones, solo se detiene como si fuese el final del > > conjunto de resultados. > > > > Es particular a DBD::Oracle? Probablemente. > > Nunca he tenido ese problema, y con tablas bastante m?s largas y anchas. > > ?Qu? versi?n de Oracle est?s utilizando? > -- > Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! > Geek by nature, Linux by choice, Debian of course. > If you can't apt-get it, it isn't useful or doesn't exist. > GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 > ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) > > ------------------------------------------------------------------------ > Enviar e-mail a colocando en el cuerpo: > "UNSUBSCRIBE caracas-pm-list" para desuscribirse. > "INFO caracas-pm-list" para conocer las reglas de etiqueta. > ------------------------------------------------------------------------ > -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Fri Apr 11 13:42:49 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Resuelto (Re: L=EDmite_en_conjunto_de_resultados_ con_DBD::Oracle)?= Message-ID: <20030411184249.4147.qmail@linuxmail.org> Disculpen la estupidez pero tenemos tres instancias (me acabo de enterar y una de ellas tiene 3677 registros) y no tuve cuidado con el environment. Gracias por su colaboración. ----- Original Message ----- From: Francisco Obispo Date: Fri, 11 Apr 2003 12:04:31 -0400 To: caracas-pm-list@pm.org Subject: Re: Límite_en_conjunto_de_resultados_ con_DBD::Oracle > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Envia adicionalmente el query que usas y asegurate que el proceso que cargó > esos registros hizo commit > > salu2 > > Ernesto Hernandez-Novich wrote: > > |On Fri, 11 Apr 2003, Alejandro Imass wrote: > | > |>Estoy recorriendo un simple query a una tabla de un poco mas de 50000 > |>registros pero la funcisn fetchrow_hasref se detiene en el registro 3677. > |>No da errores ni excepciones, solo se detiene como si fuese el final del > |>conjunto de resultados. > |> > |>Es particular a DBD::Oracle? Probablemente. > | > | > |Nunca he tenido ese problema, y con tablas bastante más largas y anchas. > | > |¿Qué versión de Oracle estás utilizando? > > > - -- > __________________________________________________________________ > Francisco Jose Obispo Semidey > System Administrator > ccTLD .VE Technical Contact - http://www.nic.ve > CNTI - REACCIUN - http://www.cnti.ve > Work: +58 212 709 5257 > GPG Fingerprint: 23FE 02B7 2E9A 24DB 51F3 29CB 87CF 3C30 3236 D09D > ___________________________________________________________________ > MOTD: > When I met th'POPE back in '58, I scrubbed him with a MILD SOAP or > DETERGENT for 15 minutes. He seemed to enjoy it ... > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.0.7 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iD8DBQE+lueOh888MDI20J0RAsfPAKCgoj1BOEx5q92S2g9bCi1700f0owCgtdqf > myrzAvhvhW1estiJ497wTio= > =yrmn > -----END PGP SIGNATURE----- > > > ------------------------------------------------------------------------ > Enviar e-mail a colocando en el cuerpo: > "UNSUBSCRIBE caracas-pm-list" para desuscribirse. > "INFO caracas-pm-list" para conocer las reglas de etiqueta. > ------------------------------------------------------------------------ > -- Alejandro Imass Usuario GNU/Linux CCS-VE #256638 -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From fobispo at nic.ve Fri Apr 11 14:10:11 2003 From: fobispo at nic.ve (Francisco Obispo) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Re: L=EDmite en conjunto de resultados con DBD::Oracle?= In-Reply-To: <20030411183550.31290.qmail@linuxmail.org> References: <20030411183550.31290.qmail@linuxmail.org> Message-ID: <3E971313.4070208@nic.ve> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hola.. Bueno, yo especifico en mis DSNs lo siguiente: $DSN="dbi:Oracle:host=;sid="; no conoc?a DBD::Oracle8 ... por lo general uso DBD::Oracle, cuando lo compilas el establece los links con las librerias de oracle8i.. Alejandro Imass wrote: |Oracle 8.0.5.0.0 |Perl 5.6.1 |DBI 1.14 |DBD-Oracle 1.12 |DBD-Oracle8 1.06 | |Una preguntica, si pongo Oracle8 en el connect string me dice que no encuentra el m?dulo aunque est? instalado con la versi?n especificada arriba. Hay otra forma expl?cita de decirle que es 8; ser? ese el problema? | |Snip del c?digo de prueba: | | | $dbh = DBI->connect('dbi:Oracle:','imat', 'material') or die $DBI::errstr; | | $query = qq| | SELECT SN, NOUN, MODIFIER FROM PARTS_MASTER | |; | | $sth = $dbh->prepare($query); | $rv = $sth->execute(); | | $rows=0; | while(my $ref = $sth->fetchrow_hashref(NAME_lc)){ | $rows++; # rows counter | | $sn = @$ref{'sn'}; | $noun = @$ref{'noun'}; | $modifier = @$ref{'modifier'}; | } | print $rows; | | $dbh->disconnect(); | $sth->rows te indica cuantas filas fueron procesadas... asi que te evitas la variable $rows. No todos los drivers DBD::XXX lo soportan, pero se que oracle si. Adicionalmente no se... creo que para lo que hace ese script veo mucho m?s trabajoso toda esa derefereciacion para obtener los valores..., quiz?s podrias hacer algo como: while( my ($sn,$noun,$modifier)=$sth->fetchrow_array){ ~ # .. hacer algo con $sn , $noun y $modifier } lo cual es un poco mas barato. recuerda el $sth->disconnect no veo nada que te pueda estar causando los problemas que me indicas, alguno de esos datos son de tipo Long? ..Mhhm, el query via SQLPLUS te devuelve ese mismo numero de registros? en estos dias me ocurri? algo muy similar.. estaba haciendo un reporte de una base de datos que tenia >2000000 de registros, y el query no me devolvia nada !! como necesitaba la soluci?n immediata lo tuve que hacer en Java, pero ahora que tengo un poco mas de tiempo voy a ver que fu? lo que paso. Saludos | | |----- Original Message ----- |From: Ernesto Hernandez-Novich |Date: Fri, 11 Apr 2003 11:41:37 -0400 (VET) |To: Perl Mongers Caracas |Subject: Re: L?mite en conjunto de resultados con DBD::Oracle | |>On Fri, 11 Apr 2003, Alejandro Imass wrote: |> |>>Estoy recorriendo un simple query a una tabla de un poco mas de 50000 |>>registros pero la funcisn fetchrow_hasref se detiene en el registro 3677. |>>No da errores ni excepciones, solo se detiene como si fuese el final del |>>conjunto de resultados. |>> |>>Es particular a DBD::Oracle? Probablemente. |> |>Nunca he tenido ese problema, y con tablas bastante m?s largas y anchas. |> |>?Qu? versi?n de Oracle est?s utilizando? |>-- |>Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! |>Geek by nature, Linux by choice, Debian of course. |>If you can't apt-get it, it isn't useful or doesn't exist. |>GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 |>?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) |> |>------------------------------------------------------------------------ |>Enviar e-mail a colocando en el cuerpo: |>"UNSUBSCRIBE caracas-pm-list" para desuscribirse. |>"INFO caracas-pm-list" para conocer las reglas de etiqueta. |>------------------------------------------------------------------------ |> | - -- __________________________________________________________________ Francisco Jose Obispo Semidey System Administrator ccTLD .VE Technical Contact - http://www.nic.ve CNTI - REACCIUN - http://www.cnti.ve Work: +58 212 709 5257 GPG Fingerprint: 23FE 02B7 2E9A 24DB 51F3 29CB 87CF 3C30 3236 D09D ___________________________________________________________________ MOTD: Most people need some of their problems to help take their mind off some of the others. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQE+lxMRh888MDI20J0RAp7oAKDVwzaBB5EDM7/N8xMgEXlkMZ7Z2wCdGaVa Gdq/xmhlOpxGm4g36mdPRuk= =6p7m -----END PGP SIGNATURE----- ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Fri Apr 11 15:05:31 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Re: Re: L=EDmite en conjunto de resultados con DBD::Oracle?= Message-ID: <20030411200531.19447.qmail@linuxmail.org> Gracias por el dato. El problema era justamente el environment. Fué una estupidez mía. Gracias de nuevo. ----- Original Message ----- From: Francisco Obispo Date: Fri, 11 Apr 2003 15:10:11 -0400 To: caracas-pm-list@pm.org Subject: Re: Re: Límite en conjunto de resultados con DBD::Oracle > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hola.. > > Bueno, yo especifico en mis DSNs lo siguiente: > > $DSN="dbi:Oracle:host=;sid="; > > no conocía DBD::Oracle8 ... por lo general uso DBD::Oracle, cuando > lo compilas el establece los links con las librerias de oracle8i.. > > > Alejandro Imass wrote: > > |Oracle 8.0.5.0.0 > |Perl 5.6.1 > |DBI 1.14 > |DBD-Oracle 1.12 > |DBD-Oracle8 1.06 > | > |Una preguntica, si pongo Oracle8 en el connect string me dice que no > encuentra el módulo aunque está instalado con la versión especificada > arriba. Hay otra forma explícita de decirle que es 8; será ese el problema? > | > |Snip del código de prueba: > | > | > | $dbh = DBI->connect('dbi:Oracle:','imat', 'material') or die > $DBI::errstr; > | > | $query = qq| > | SELECT SN, NOUN, MODIFIER FROM PARTS_MASTER > | |; > | > | $sth = $dbh->prepare($query); > | $rv = $sth->execute(); > | > | $rows=0; > | while(my $ref = $sth->fetchrow_hashref(NAME_lc)){ > | $rows++; # rows counter > | > | $sn = @$ref{'sn'}; > | $noun = @$ref{'noun'}; > | $modifier = @$ref{'modifier'}; > | } > | print $rows; > | > | $dbh->disconnect(); > | > $sth->rows te indica cuantas filas fueron procesadas... asi que te > evitas la variable $rows. > > No todos los drivers DBD::XXX lo soportan, pero se que oracle si. > > Adicionalmente no se... creo que para lo que hace ese script veo mucho > más trabajoso > toda esa derefereciacion para obtener los valores..., quizás podrias > hacer algo como: > > while( my ($sn,$noun,$modifier)=$sth->fetchrow_array){ > > ~ # .. hacer algo con $sn , $noun y $modifier > } > > lo cual es un poco mas barato. > > > recuerda el $sth->disconnect > > > no veo nada que te pueda estar causando los problemas que me indicas, > alguno de esos > datos son de tipo Long? ..Mhhm, el query via SQLPLUS te devuelve ese > mismo numero de registros? > > en estos dias me ocurrió algo muy similar.. > estaba haciendo un reporte de una base de datos que tenia >2000000 de > registros, y el query > no me devolvia nada !! como necesitaba la solución immediata lo tuve > que hacer en Java, > pero ahora que tengo un poco mas de tiempo voy a ver que fué lo que paso. > > Saludos > > > > > > > > > > > > | > | > |----- Original Message ----- > |From: Ernesto Hernandez-Novich > |Date: Fri, 11 Apr 2003 11:41:37 -0400 (VET) > |To: Perl Mongers Caracas > |Subject: Re: Límite en conjunto de resultados con DBD::Oracle > | > |>On Fri, 11 Apr 2003, Alejandro Imass wrote: > |> > |>>Estoy recorriendo un simple query a una tabla de un poco mas de 50000 > |>>registros pero la funcisn fetchrow_hasref se detiene en el registro 3677. > |>>No da errores ni excepciones, solo se detiene como si fuese el final del > |>>conjunto de resultados. > |>> > |>>Es particular a DBD::Oracle? Probablemente. > |> > |>Nunca he tenido ese problema, y con tablas bastante más largas y anchas. > |> > |>¿Qué versión de Oracle estás utilizando? > |>-- > |>Ernesto Hernández-Novich - Running Linux 2.4.19 i686 - Unix: Live free > or die! > |>Geek by nature, Linux by choice, Debian of course. > |>If you can't apt-get it, it isn't useful or doesn't exist. > |>GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 > |>¿Sabe leer? Elimine mi firma de sus respuestas; sé quién soy ;) > |> > |>------------------------------------------------------------------------ > |>Enviar e-mail a colocando en el cuerpo: > |>"UNSUBSCRIBE caracas-pm-list" para desuscribirse. > |>"INFO caracas-pm-list" para conocer las reglas de etiqueta. > |>------------------------------------------------------------------------ > |> > | > > - -- > __________________________________________________________________ > Francisco Jose Obispo Semidey > System Administrator > ccTLD .VE Technical Contact - http://www.nic.ve > CNTI - REACCIUN - http://www.cnti.ve > Work: +58 212 709 5257 > GPG Fingerprint: 23FE 02B7 2E9A 24DB 51F3 29CB 87CF 3C30 3236 D09D > ___________________________________________________________________ > MOTD: > Most people need some of their problems to help take their mind off > some of the others. > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.0.7 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iD8DBQE+lxMRh888MDI20J0RAp7oAKDVwzaBB5EDM7/N8xMgEXlkMZ7Z2wCdGaVa > Gdq/xmhlOpxGm4g36mdPRuk= > =6p7m > -----END PGP SIGNATURE----- > > > ------------------------------------------------------------------------ > Enviar e-mail a colocando en el cuerpo: > "UNSUBSCRIBE caracas-pm-list" para desuscribirse. > "INFO caracas-pm-list" para conocer las reglas de etiqueta. > ------------------------------------------------------------------------ > -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Fri Apr 11 15:22:32 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Re: L=EDmite en conjunto de resultados con DBD::Oracle?= In-Reply-To: <20030411183550.31290.qmail@linuxmail.org> Message-ID: On Sat, 12 Apr 2003, Alejandro Imass wrote: > Oracle 8.0.5.0.0 Oracle 8.0.5.0.0 en Linux es _malo_ (de hecho es malo en casi cualquier Unix, porque necesit? un par de parches para resolver varios problemas fundamentales de conectividad). Obt?n 8.1.7 con su ?ltimo patch (eso ser?a 8.1.7.4.0), o 9.0 con su ?ltimo patch (eso ser?a 9.0.2.0.0). Son m?s estables. Tuve toda suerte de problemas estrafalarios utilizando 8.0.5 en Linux, partiendo por los malabarismos para instalarlo en un sistema con glibc 2.1 porque quiere enlazarse con glibc 2.0 "porque s?", siguiendo con los problemas de las librer?as compartidas. Tampoco es que 8.1.7.4.0 sea una maravilla, pero por lo menos no consume tantos recursos como 9.0; a?n as?, tuve que instalar los drivers JDBC de 9.0 para poder conectar una aplicaci?n Java con 8.1.7.4.0 porque el JDBC que viene con 8.1.7.4.0 no sirve. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Fri Apr 11 15:23:17 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Resuelto (Re: L=EDmite_en_conjunto_de_resultados_ con_DBD::Oracle)?= In-Reply-To: <20030411184249.4147.qmail@linuxmail.org> Message-ID: On Sat, 12 Apr 2003, Alejandro Imass wrote: > Disculpen la estupidez pero tenemos tres instancias (me acabo de > enterar y una de ellas tiene 3677 registros) y no tuve cuidado con > el environment. Brown paper bag :-) > Gracias por su colaboracisn. De todas maneras, evita 8.0.5 en Linux. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it isn't useful or doesn't exist. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ?Sabe leer? Elimine mi firma de sus respuestas; s? qui?n soy ;) ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Sun Apr 13 08:29:37 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: =?iso-8859-1?Q?Re: Re: L=EDmite en conjunto de resultados con DBD::Oracle?= Message-ID: <20030413132937.32056.qmail@linuxmail.org> Gracias por el dato, pero no depende de m?. Est? en un Digital True 64 y como es un bicho en producci?n nadie lo quiere tocar. Lo que estamos haciendo son programas y librer?as de conversi?n masiva de datos utilizando Perl. De hecho, tengo como un a?o estandarizando todos nuestros desarrollos en Perl y migrando las cosas que ten?amos en PL/SQL a Perl para hacerlas independientes de la Base de Datos. Incluso desarrollamos un ETL propio en Perl que usamos con Cognos que maneja incrementales![1] Lo que m?s ha impresionado aqu? de Perl es la portabilidad y la velocidad, a parte por supuesto de la flexibilidad y poder de programaci?n, y hemos descubierto que la curva de aprendizaje es suave para la mayor?a de los programadores. Me atrevo a decir que no hay un lenguaje sobre el planeta m?s poderoso para el procesamiento masivo de informaci?n electr?nica. Antes que entrara Perl aqu? estas cosas se hac?a en PL/SQL ! Es m?s, en nuestra humilde experiencia en BI he notado que la mayor?a de los clientes Oracle que usan BI, emplean PL/SQL para el ETL, dada la debilidad y alto costo de los ETL comerciales. Gracias y saludos, ait [1] Para el manejo de incrementales el DBA debe permitir la creaci?n de unas tablas sat?lites, una por cada tabla del sistema original, y la instalaci?n de triggers inofensivos sobre las tablas originales (todo RDBMS que se respete soporta triggers). La idea consiste en que las tablas satelites tienen la misma definici?n de clave primaria que las tablas del sistema y poseen unas columnas especiales donde se guarda el estado de cada registro con respecto a data mart/warehouse. Ejemplo de estos estados son: Clean (en Warehouse), Dirty (En Warehouse pero cambi? en la tabla fuente), New (Nuevo registro que no ha pasado al Warehouse), entre otros. ----- Original Message ----- From: Ernesto Hernandez-Novich Date: Fri, 11 Apr 2003 16:22:32 -0400 (VET) To: Subject: Re: Re: L?mite en conjunto de resultados con DBD::Oracle > On Sat, 12 Apr 2003, Alejandro Imass wrote: > > Oracle 8.0.5.0.0 > > Oracle 8.0.5.0.0 en Linux es _malo_ (de hecho es malo en casi cualquier > Unix, porque necesit? un par de parches para resolver varios problemas > fundamentales de conectividad). > -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From juanjose at lunarpages.com Fri Apr 18 17:05:11 2003 From: juanjose at lunarpages.com (Juan Jose Natera Abreu) Date: Wed Aug 4 23:59:36 2004 Subject: Mini mirror de CPAN Message-ID: <200304181505.11050.juanjose@lunarpages.com> Hola Gente, Recuerdo que hace un tiempo, Cristobal necesitaba uno de estos, pero el Sr. Randal Schwartz no nos habia iluminado en esa epoca: http://www.stonehenge.com/merlyn/LinuxMag/col42.html Lo mejor del script es que solo se baja las versiones mas recientes de cada modulo asi que pueden tener su mini mirror de menos de 300 MB y segun Randal, actualizarlo luego solo toma en promedio de 2 a 5 minutos diarios con una linea de 28kbps. Saludos, Juan Jose A continuacion, el mismo script pero con Getopt::Std incluido :) #!/usr/bin/perl -w use strict; $|++; ### CONFIG use Getopt::Std; my %options; getopts('m:l:d', \%options); my $REMOTE = $options{'m'} || "http://cpan.valueclick.com/"; ## warning: unknown files below this dir are deleted! my $LOCAL = $options{'l'} || "/usr/local/cpan/"; my $TRACE = $options{'d'} || 0; ### END CONFIG ## core - use File::Path qw(mkpath); use File::Basename qw(dirname); use File::Spec::Functions qw(catfile); use File::Find qw(find); ## LWP - use URI (); use LWP::Simple qw(mirror RC_OK RC_NOT_MODIFIED); ## Compress::Zlib - use Compress::Zlib qw(gzopen $gzerrno); ## Read the options - ## first, get index files my_mirror($_) for qw( authors/01mailrc.txt.gz modules/02packages.details.txt.gz modules/03modlist.data.gz ); ## now walk the packages list my $details = catfile($LOCAL, qw(modules 02packages.details.txt.gz)); my $gz = gzopen($details, "rb") or die "Cannot open details: $gzerrno"; my $inheader = 1; while ($gz->gzreadline($_) > 0) { if ($inheader) { $inheader = 0 unless /\S/; next; } my ($module, $version, $path) = split; next if $path =~ m{/perl-5}; # skip Perl distributions my_mirror("authors/id/$path", 1); } ## finally, clean the files we didn't stick there clean_unmirrored(); exit 0; BEGIN { ## %mirrored tracks the already done, keyed by filename ## 1 = local-checked, 2 = remote-mirrored my %mirrored; sub my_mirror { my $path = shift; # partial URL my $skip_if_present = shift; # true/false my $remote_uri = URI->new_abs($path, $REMOTE)->as_string; # full URL my $local_file = catfile($LOCAL, split "/", $path); # native absolute file my $checksum_might_be_up_to_date = 1; if ($skip_if_present and -f $local_file) { ## upgrade to checked if not already $mirrored{$local_file} = 1 unless $mirrored{$local_file}; } elsif (($mirrored{$local_file} || 0) < 2) { ## upgrade to full mirror $mirrored{$local_file} = 2; mkpath(dirname($local_file), $TRACE, 0711); print $path if $TRACE; my $status = mirror($remote_uri, $local_file); if ($status == RC_OK) { $checksum_might_be_up_to_date = 0; print " ... updated\n" if $TRACE; } elsif ($status != RC_NOT_MODIFIED) { warn "\n$remote_uri: $status\n"; return; } else { print " ... up to date\n" if $TRACE; } } if ($path =~ m{^authors/id}) { # maybe fetch CHECKSUMS my $checksum_path = URI->new_abs("CHECKSUMS", $remote_uri)->rel($REMOTE); if ($path ne $checksum_path) { my_mirror($checksum_path, $checksum_might_be_up_to_date); } } } sub clean_unmirrored { find sub { return unless -f and not $mirrored{$File::Find::name}; print "$File::Find::name ... removed\n" if $TRACE; unlink $_ or warn "Cannot remove $File::Find::name: $!"; }, $LOCAL; } } ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From ait at linuxmail.org Fri Apr 25 10:07:30 2003 From: ait at linuxmail.org (Alejandro Imass) Date: Wed Aug 4 23:59:36 2004 Subject: Perl: Usar Chart o GD ? Message-ID: <20030425150732.16583.qmail@linuxmail.org> Quisiera un consejo. Estoy usando Chart para una aplicacioncita porque me parece m?s simple y hay un tipo de gr?ficos que me interesa que no he visto con GD. Pero, he notado que Chart no est? usualmente instalado generalmente en los servidores, en cambio GD si lo est? (me refiero a servidores que ofrecen hosting bajo Linux / Unix). Tengo las siguientes opciones: 1) Reescribir la parte gr?fica y soportar tanto GD como Chart 2) Soportar GD solamente 3) Quedarme con Chart y convencer a los admin a instalarlo 4) Usar otra librer?a m?s popular? (no conozco sino estas dos y gnuplot). 5) Darle a pi? con gnuplot (as? lo hac?a antes pero es un poco doloroso) Claro, todos dir?n que lo mejor es soportar ambas, pero quiz?s alguien conoce otra lib, o quiz?s mi percepci?n sobre Chart sea errada y son solo los servidores en los que trabajo. Gracias. -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From emhn at telcel.net.ve Fri Apr 25 14:26:42 2003 From: emhn at telcel.net.ve (Ernesto Hernandez-Novich) Date: Wed Aug 4 23:59:36 2004 Subject: Perl: Usar Chart o GD ? In-Reply-To: <20030425150732.16583.qmail@linuxmail.org> Message-ID: On Fri, 25 Apr 2003, Alejandro Imass wrote: > Estoy usando Chart para una aplicacioncita porque me parece mas > simple y hay un tipo de graficos que me interesa que no he visto > con GD. Pero, he notado que Chart no esta usualmente instalado > generalmente en los servidores, en cambio GD si lo esta (me refiero > a servidores que ofrecen hosting bajo Linux / Unix). Si, porque los servidores de hosting generalmente ofrecen Red Hat o SuSE y ninguna de esas dos distribuciones tiene paquetes listos. Sin embargo... apt-get install libgd-graph-perl y por eso es que ser?a interesante que consiguieras hosting con Debian :-) Alguien de l-linux (y de ?sta lista) sabe como instalar Debian sobre un Red Hat previamente instalado. Me prest? ese servicio para convertir un servidor de RackSpace de Red Hat a Linux; pregunta los detalles a ver si te los ofrece a t? tambi?n. > 3) Quedarme con Chart y convencer a los admin a instalarlo Esta ser?a mi opini?n. GD::Graph es excelente. -- Ernesto Hern?ndez-Novich - Running Linux 2.4.20 i686 - Unix: Live free or die! Geek by nature, Linux by choice, Debian of course. If you can't apt-get it, it doesn't exist or isn't important. GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3 ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------ From lgallard at linuxmail.org Sat Apr 26 18:24:38 2003 From: lgallard at linuxmail.org (Luis M. Gallardo D.) Date: Wed Aug 4 23:59:36 2004 Subject: Perl: Usar Chart o GD ? Message-ID: <20030426232439.29056.qmail@linuxmail.org> ----- Original Message ----- From: Ernesto Hernandez-Novich Date: Fri, 25 Apr 2003 15:26:42 -0400 (VET) To: Perl Mongers Caracas Subject: Re: Perl: Usar Chart o GD ? > On Fri, 25 Apr 2003, Alejandro Imass wrote: > > Estoy usando Chart para una aplicacioncita porque me parece mas > > simple y hay un tipo de graficos que me interesa que no he visto > > con GD. Pero, he notado que Chart no esta usualmente instalado > > generalmente en los servidores, en cambio GD si lo esta (me refiero > > a servidores que ofrecen hosting bajo Linux / Unix). > > Si, porque los servidores de hosting generalmente ofrecen Red Hat o SuSE > y ninguna de esas dos distribuciones tiene paquetes listos. > > Sin embargo... > > apt-get install libgd-graph-perl > > y por eso es que ser?a interesante que consiguieras hosting con Debian :-) > > Alguien de l-linux (y de ?sta lista) sabe como instalar Debian sobre un > Red Hat previamente instalado. Me prest? ese servicio para convertir un > servidor de RackSpace de Red Hat a Linux; pregunta los detalles a ver si > te los ofrece a t? tambi?n. Eso si ser?a interesante... de pana que no despues de que uno usa Debian la cosa es como distinta ;-= Luis M. Gallardo D. Linux User #130502 Caracas - Venezuela -- ______________________________________________ http://www.linuxmail.org/ Now with e-mail forwarding for only US$5.95/yr Powered by Outblaze ------------------------------------------------------------------------ Enviar e-mail a colocando en el cuerpo: "UNSUBSCRIBE caracas-pm-list" para desuscribirse. "INFO caracas-pm-list" para conocer las reglas de etiqueta. ------------------------------------------------------------------------