• Publicidad

selectall_arrayref

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

selectall_arrayref

Notapor mgonzalez » 2010-10-13 09:22 @432

Hola.

Estoy haciendo mantención a un sitio hecho en Perl+Ajax+SQLServer7. El tema es que el sitio tiene la opción de exportar una consulta a Excel que en algunos casos se cuelga y envía el mensaje:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
HTTP/1.1 502 Error de la puerta de enlace o gateway Server: Microsoft-IIS/5.0 Date: Tue, 05 Oct 2010 21:56:32 GMT Connection: close Content-Length: 199 Content-Type: text/html
Caducidad CGI
La aplicación CGI especificada ha excedido el tiempo permitido para procesamiento. El servidor ha eliminado el proceso.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Revisando encontré que todas las consultas la tiene en duro en el código; además usa prepare(), luego execute(), el cual reemplacé por selectall_arrayref().

Tengo la convicción que son éstas instrucciones las que agotan el tiempo disponible.

Lo que necesito es pasar este código al equivalente con selectall_arrayref():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#$rows->{id} viene de una consulta anterior
 my $sth1 = $dbh->prepare("Select * from tabla where campo = ?");
sth1->execute($rows->{id});
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Muchas Gracias.
mgonzalez
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2010-10-13 08:54 @412

Publicidad

Re: selectall_arrayref

Notapor explorer » 2010-10-13 10:31 @479

Bienvenido a los foros de Perl en Español, mgonzalez.

En principio, sería algo así (no probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $sth1 = $dbh->prepare("Select * from tabla where campo = ?");
$ary_ref = $dbh->selectall_arrayref($sth1, {}, $rows->{id} );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Otra cosa que puedes hacer es subir el límite de agotamiento de tiempo por parte del servidor web. Quizás se lo subes 30 s, le dará tiempo al CGI a que termine de hacer la consulta.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: selectall_arrayref

Notapor mgonzalez » 2010-10-15 07:31 @355

Muchísimas gracias por tu respuesta.

Hay algo que me llama la atención. Se trata de que aquí hay dos sistemas hechos en Perl a los que doy mantención. Uno de ellos funciona sin problemas; sin embargo el otro es bastante lento. Ambos están en un mismo servidor de BBDD y de los fuentes. Al revisar solo encontré que el que funciona bien usa "selectall_arrayref" para ejecutar sus consultas, mientras que el otro usa "prepare" y "execute". Mi duda es si será éste el problema. He revisado las consultas y todas funcionan bien, en términos de costo.

Como primera medida he solicitado que se aumente el tiempo de espera del script, que me parece, debería estar en 180 segundos.

Una última cosa, ¿hay alguna forma de ir cerrando los cursores que se van abriendo?

De nuevo, gracias.
Att. Mauricio
mgonzalez
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2010-10-13 08:54 @412

Re: selectall_arrayref

Notapor explorer » 2010-10-15 08:09 @381

Llamando a finish(), aplicando al controlador de la consulta, cierras el cursor. Pero, normalmente, no debería ser necesario hacer esto, porque es algo que "debería" hacer el controlador de la base de datos.

Su uso normal sería para liberar memoria de tablas de resultados de los que hemos extraído la información que queríamos.

Más información en DBI, sección de finish().

Como se comenta ahí, finish() debería haberse llamado discard_pending_rows().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: selectall_arrayref

Notapor mgonzalez » 2010-10-15 08:20 @388

¡¡Muchas Gracias!!
mgonzalez
Perlero nuevo
Perlero nuevo
 
Mensajes: 28
Registrado: 2010-10-13 08:54 @412


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados