PERL es un acrónimo de 'Practical Extraction and Report Language' (Lenguaje práctico de extracción e informe). Perl se puede utilizar en todos y cada uno de los sistemas operativos y plataformas hardware del mundo. Usted puede usar Perl en Windows95/NT, iMac de Apple Macintosh, todas las variantes de Unix (Solaris, HPUX, AIX, Linux, SCO, etc) ordenadores centrales MVS, ordenadores de sobremesa OS/2, OS/400, Amdahl UTS y muchos otros. ¡Perl corre INCLUSO en muchos sistemas operativos y plataformas hardware poco populares o generalmente desconocidos! De modo que no se sorprenda si encuentra Perl corriendo en un sistema operativo muy ráramente usado. Puede usted imaginar la vasta extensión de la base de usuarios y desarrolladores de Perl.
La interface Perl para PostgreSQL está incluida en la distribución de PostgreSQL. Compruebelo en el directorio src/pgsql_perl5
Contacto por Email a Pgsql_perl5: E.Mergl@bawue.de
Otra fuente para conseguirlo- ftp://ftp.kciLink.com/pub/PostgresPerl-1.3.tar.gz
Página principal de Perl : http://www.perl.com/perl/index.html
Encontrará un tutotial sobre Perl buscando el título Tutorial en: http://reference.perl.com/
La FAQ sobre Perl está en: http://www.yahoo.com/Computers_and_Internet/Programming_Languages/Perl/
Para conseguir los rpm de la Interface de Gráfica de Usuario (GUI) para Perl Perl-Qt, vaya a: ftp://ftp.redhat.com/pub/contrib/i386 y busque PerlQt-1.06-1.i386.rpm
La Interface Gráfica de Usuario para Perl Perl-Qt : http://www.accessone.com/~jql/perlqt.html
La Interface Gráfica de Usuario para Perl Perl-XForms : ftp://ftp.redhat.com/pub/contrib/i386 y busque Xforms4Perl-0.8.4-1.i386.rpm
La Interface Gráfica de Usuario para Perl Perl-Tk : ftp://ftp.redhat.com/pub/contrib/i386
Los kits de GUI para Perl: http://reference.perl.com/query.cgi?ui
Interface para bases de datos en Perl: http://reference.perl.com/query.cgi?database
Un traductor de Perl a "C": http://www.perl.com/CPAN-local/modules/by-module/B/ y busque Compiler-a3.tar.gz
Traductor de shell Bourne a Perl: http://www.perl.com/CPAN/authors/id/MERLYN/sh2perl-0.02.tar.gz
Los traductores de awk a Perl a2p y sed a Perl s2p están incluidos con la distribución de PERl.
Busque también en los grupos de noticias sobre PERL en comp.lang.perl.*
El Interface de Bases de Datos en Perl (DBI, Database Interface) es un Interface de Programación de Aplicaciones (API) para el lenguaje Perl. Las especificaciones del API DBI para Perl definen un juego de funciones, variables y convenciones que proporcionan un interface de base de datos consistente e independiente de la base de datos que se esté usando en ese momento. La información para esta sección DBI se ha obtenido del documento 'DBI FAQ' cuyo autor es Alligato Descartes, y lo reproducimos aquí con su permiso.
Alligator Descartes Hermetica: descarte@hermetica.com
Consiga DBD-Pg-0.89.tar.gz en uno de los siguientes:
DBD-Pg-0.89 : http://www.perl.com/CPAN/modules/by-module/DBD/
Red completa de archivos de Perl (Comprehensive Perl Archive Network CPAN) http://www.perl.com/CPAN
Páginas del módulo DBI y de la lista de drivers: http://www.hermetica.com/technologia/perl/DBI
Información sobre DBI http://www.fugue.com/dbi/
Dirección principal de ftp ftp://ftp.demon.co.uk/pub/perl/db
Enlaces variados sobre DBI http://www-ccs.cs.umass.edu/db.html
Enlaces variados sobre DBI http://www.odmg.org/odmg93/updates_dbarry.html
Enlaces variados sobre DBI http://www.jcc.com/sql_stnd.html
La base de datos PostgreSQL http://www.postgresql.org
REQUERIMIENTOS:
- Monte, pruebe e instale Perl 5 (at least 5.002)
- Monte, pruebe e instale el módulo DBI (at least 0.89)
- Monte, pruebe e instale PostgreSQL (at least 6.2)
Envíe por favor comentarios y avisos de error a
incluyendo por favor la salida de perl -v, y perl -V, la versión de PostgreSQL, la versión de DBD-Pg, y la versión de DBI en su aviso de error.
Tomado de Tim Bunce, el arquitecto y autor de DBI:
``"DBI es un Interface de Programación de Aplicaciones de Acceso a Bases de Dados (API) para el lenguaje Perl. La especificación del API DBI define un juego de funciones, variable y convenciones que proporcionan un interface de base de datos consistente e independiente de la base de datos que se esté utilizando"
En un lenguaje sencillo, la interface DBI permite a los usuarios acceder a múltiples tipos de bases de datos de modo transparente. Por ello, si usted está conectando a una Oracle, Informix, mSQL, Sybase, o cualquier otra base de datos, no necesita conocer los mecanismos subyacentes de lenguaje 3GL. La API definida por DBI trabajara en todos estos tipos de datos.
Un beneficio similar se consigue por la capacidad de conectar a dos bases de datos diferentes de vendedores diferentes con un único script en perl, es decir, yo quiero leer datos de una base Oracle e insertarlos en una Informix, y todo en un único programa. La capa DBI le permite hacer esto de una forma simple y poderosa.
DBperl es el nombre anterior para la especificación del interfe. Habitualmente, se utiliza ahora para referirse a los módulos perl4 para acceso a bases de datos, tales como oraperl, isqlperl, ingperl y demás. Estos interfaces no tienen una API estandar y generalmente no están soportados.
Aquí tiene una lista de módulos DBperl, sus correspondientes contrapartidas DBI, e información de soporte. Las preguntas sobre drivers DBI deberían dirigirse a las listas de correo de usuarios de DBI.
Módulo Base de datos Autor DBI ----------- ----------------- ------ --- Sybperl Sybase Michael Peppler DBD::Sybase <mpeppler@datamig.com> http://www.mbay.net/~mpeppler Oraperl Oracle 6 & 7 Kevin Stock DBD::Oracle <dbi-users@fugue.com> Ingperl Ingres Tim Bunce & DBD::Ingres Ted Lemon <dbi-users@fugue.com> Interperl Interbase Buzz Moschetti DBD::Interbase <buzz@bear.com> Uniperl Unify 5.0 Rick Wargo None <rickers@coe.drexel.edu> Pgperl Postgres Igor Metz DBD::Pg <metz@iam.unibe.ch> Btreeperl NDBM John Conover SDBM? <john@johncon.com> Ctreeperl C-Tree John Conover None <john@johncon.com> Cisamperl Informix C-ISAM Mathias Koerber None <mathias@unicorn.swi.com.sg> Duaperl X.500 Directory Eric Douglas None User Agent
Sin embargo, algunos módulos DBI tienen capas de emulación de DBperl, así, DBD::Oracle viene con una capa de emulación Oraperl, que le permite correr scripts oraperl heredados sin modificaciones. La capa de emulación traduce las llamadas del API oraperl a llamadas de DBI y las ejecuta a través del enlace DBI.
Aquí hay una tabla de información sobre las capas de emulación:
Módulo Capa de Emulación Situación ------ ----------------- --------- DBD::Oracle Oraperl Completa DBD::Informix Isqlperl En desarrollo. DBD::Sybase Sybperl ¿Trabajando?(Necesita verificación) DBD::mSQL Msqlperl Liberado experimentalmente con DBD::mSQL-0.61
La emulación Msqlperl es un caso especial. Msqlperl es un driver en perl5 para bases de datos mSQL, pero no se ajusta a la especificación DBI. Su uso está siendo abandonado en favor de DBD::MSQL. Se puede descargar Msqlperl desde CPAN a travé de:
Hay algunas fuentes de información sobre DBI:
Especificaciones DBI http://www.hermetica.com/technologia/perl/DBI/doc/dbispec
Hay dos especificiaciones utilizables en este enlace, la nueva especificación DBI Draft, que es un documento en rápida evolución que el equipo de desarrollo dirige hacia una interface estable, y la histórica Especificación DBperl, desde la que ha evolucionado la actual interface DBI.
El documento anterior debería se visto solo por su interés histórico, y no debería servir como un manual de programación, ni documentación autorizada en ningún sentido. Sin embargo, sigue siendo muy utilizable como fuente de referencias.
Documentación POD (N. del T.: ¿Piece of Documentation?). Los PODs son trozos de documentación habitualmente embebidos en los programas en perl, que documentan el código "en el sitio", proporcionando un recurso utilizable por los programadores y usuarios de los módulos. Los POD para DBI y los driver están empezando a volverse lugares comunes, y la documentación para estos módulos puede leerse con los siguientes comandos:
El POD para la especificación DBI se puede leer con el comando
perldoc DBI
Los usuarios de Oraperl y la capa de emulación Oraperl incluída en DBD::Oracle, pueden leer sobre como programar con la interface Oraperl tecleando:
perldoc Oraperl
Esto producirá una copia actualizada de la página man sobre oraperl original, escrita por Kevin Stock para perl4. La API oraperl está listada y descrita completamente ahí.
Los usuarios del módulo DBD::mSQL pueden leer sobre algunas de las funciones privadas y las peculiaridades de ese driver tecleando:
perldoc DBD::mSQL
Las Preguntas más Frecuentemente Respondidas (FAQ) están utilizables como documentación POD. Léalas tecleando:
perldoc DBI::FAQ
Esta alternativa puede ser más conveniente para personas que no están permanentemente, o adecuadamente, conectadas a internet.
Los POD sobre información general para escribir POD, y la filosofía de los POD en general, se puede leer tecleando:
perldoc perlpod
Los usuarios con el módulo Tk instalado pueden estar interesados en un lecto de POD basado en Tk, llamado tkpod, que formatea los POD en una forma conveniente y legíble.
Hay una serie de aproximaciones ocasionales de varias personas en las listas de correo de DBI.
"DBI -- El Interface de bases de datos en perl5" es un articulo escrito por Alligator Descartes y Tim Bunce sobre la estructura de DBI. Se publico en el fascículo 5 de "The Perl Journal". Es extremandamente bueno. Compre la revista. De hecho, cómprelos todos. La página Web de "The Perl Journal" está en:
``"DBperl" Este artículo publicado en la edición de Noviembre de 1.996 de "Dr. Dobbs Journal" se refiere al DBperl.
"The Perl5 Database Interface": Es un libro escrito por Alligator Descartes y publicado por O'Reilly y asociados.
Hay tres listas de correo sobre la ejecución de DBI de Ted Lemon. Se pueden subscribir y desubscribir a través de la WWW en
Listas de correo http://www.fugue.com/dbi
Las listas en las que pueden participar los usuarios son:
dbi-announce Esta lista de correo es sólo para anuncios. Si usted no puede utilizar adecuadamente el formato de la página www correspondiente, suscribase enviando un correo-e a la dirección:
dbi-announce-request@fugue.com y en cuerpo del mensaje ponga sólo 'subscribe'
dbi-dev Esta lista de correo está dedicada al uso de desarrolladores dicutiendo sobre ideas y conceptos sobre la mecánica de drivers, interface DBI y API. Utilizar sólo para desarrolladores o personas interesadas. Si usted no puede utilizar adecuadamente el formulario de la página www anterior, subscríbase enviando un correo-e a la dirección:
dbi-dev-request@fugue.com con el mensaje 'subscribe' en el cuerpo del mensaje.
dbi-users Esta lista de correo es una lista de propósito general, utilizada para notificar errores, discutir problemas y preguntas de tipo general. Si usted no puede utilizar adecuadamente la página www anterior, subscríbase enviando un correo-e a la dirección:
dbi-users-request@fugue.com con el mensaje 'subscribe' en el cuerpo del mensaje
Archivos de listas de correo:
Archivos de listas de correo en Estados Unidos: http://outside.organic.com/mail-archives/dbi-users/
Archivos de Listas de correo europeas http://www.rosat.mpe-garching.mpg.de/mailing-lists/PerlDB-Interest
Si se le produce un volcado de memoria (core dump), intente con el módulo Devel::CoreStack para generar un rastro de la pila a partir del volcado de memoria. Puede encontrar Devel::CoreStack en CPAN, en:
Envíe a las listas de correo dbi-users es rastro de la pila, las versiones de los módulos, la versión de perl, el juego de pruebas, versiones de sistema operativo y cualquier otra información que considere pertinente. Cuanta más información envíe, más rápido podrán resolver su problema los desarrolladores. Si no nos envía nada, no espere nada.
Las migraciones de DBI y DBD:Oracle para Windows de 32 bits son ahora una parte estandar del DBI, de modo que descargando una versión de DBI superior a la 0.81, debería trabajar adecuadamente. Podrá usted acceder a las bases Microsoft Access y SQL-Server desde DBI a través de ODBC. Con las versiones de DBI 0.79 y posteriors una 'capa de emulación' experimental para el módulo Win32::ODBC. Se llama DBI::W32ODBC. Necesitará el módulo Win32::ODBC.
Win32 DBI http://www.hermetica.com/technologia/perl/DBI/win32
Win32 ODBC http://www.roth.net
UNIX fué dotado originariamente con unas "bases de datos" sencillas basadas en ficheros, llamadas "el sistema dbm". Dbm le permitía almacenar datos en ficheros, y recuperarlos rápidamente. Sin embargo, también tenían serios problemas.
Bloqueo de ficheros.
Los sistemas dbm no permitían capacidades de bloqueo de ficheros particularmente robustas, ni niguna capacidad de corregir problemas surgidos de escrituras simultáneas [en la base de datos].
Estructuras de datos arbitrarios.
Los sistemas dbm solo permitían una estructura de datos fija: los pares clave-valor. Ese valor podría ser un objeto complejo, tal como una estructura [C], pero la clave debía ser única. Esto era una gran limitación sobre la utilidad de los sistemas dbm.
Sin embargo, los sistemas dbm también proporcionaban una función utilizable por los usuarios con juegos de datos sencillos y recursos ilimitados, puesto que era rápida, robusta y extremadamente bien comprobada. Los módulos perl para acceder a sistemas dbm han sido integrados ahora en el núcleo de la distribución de Perl, a través del módulo AnyDBM_File.
Además to todo esto, DBM es una solución perfectamente satisfactoria para bases de datos esencialmente de sólo lectura, o juegos de datos pequeños y sencillos. Sin embargo, para juegos de datos más potentes y escalables, no se puede mencionar bloqueos transaccionales robustos, a los usuarios se les recomienda usar DBI.
Dado que hacemos el supuesto de que la característica por la que está usted preguntando una característica no estandar de una base de datos específica, la respuesta será que no.
DBI refleja una API genérica que trabajará para la mayoría de las bases de datos, y no tiene funcionalidades específicas de una base de datos.
Sin embargo, los autores de los drivers pueden, si lo desean, incluir enlaces a funcionalidades específicas de una base de datos a través de los métodos de funciones definidas en la API DBI. Los desarrolladores de scripts deberían tener en cuenta que el uso de funcionalidades proporcionadas a través de los métodos de funciones no son deseables si se desea portabilidad a distintas bases de datos.
En una palabra, ¡si! ¡DBI es completamente utilizable para programar CGI! De hecho, la programación de CGI es uno de los dos usos mayores de DBI.
DBI confiere a los programadores de CGI la capacidad de ofrecer a sus usuarios bases de datos accedidas por WWW, lo que aporta a los usuarios vastas cantidades de datos ordenados para manejarlos. DBI también proporciona la posibilidad de que, si en un lugar se está recibiendo demasiado tráfico, entonces sus servidores de bases de datos pueden hacerle frente, pueden actualizar el servidor de base de datos desacoplando las escenas sin alteraciones de los scripts de CGI.
El servidor de http Apache mantiene un conjunto de demonios http hijos (httpd) para servir los requerimientos de los clientes. Utilizando el módulo mod_perl de Apache, de Doug MacEachern, el interprete de perl está embebido en el hijo httpd. El CGI, DBI y sus otros módulos favoritos pueden ser cargados en el arranque de cada hijo. Estos módulos no resran recargados a menos que se cambien en el disco. Para más información sobre Apache, vea el sitio Web del proyecto Apache:
Sitio Web del proyecto Apache: http://www.apache.org
Módulo Mod_perl http://www.perl.com/cgi-bin/cpan_mod?module=mod_perl
Utilizando el módulo Apache::DBI de Edmund Mergl, el login a la base de datos se almacena en un todo con cada uno de estos hijos httpd. Si su aplicación está basada en un único usuario de base de datos, esta conexión puede arrancarse para cada hijo. Actualmente, no se pueden compartir conexiones a base de datos entre hijos httpd. Se puede descargar Apache::DBI desde CPAN a través de:
Básicamente, una buena posibilidad de que esto ocurra se debe al hecho de que el usuario con el que usted ejecutó la línea de comando tiene bien configurado el juego de variables de entorno, en el caso de DBD::Oracle, variables como $ORACLE_HOME, $ORACLE_SID, o TWO_TASK. El proceso httpd usualmente corre bajo el usuario nobody, lo que implica que no hay entorno configurado. Cualquier script que se intente ejecutar en esta situación fallará. Para resolver este problema, coloque el entorno de su base de datos en un bloque BEGIN ( ) al principio de su script. Esto resolverá el problema. Similarmente, debería usted chequear su fichero de errores de httpd para todas las indicaciones, así como la "Guía de Idiotas para Resolver Problemas en Perl / CGI", y la "FAQ programando Perl y CGI" para posterior información. Es improbable que esto sea un problema relacionado con DBI. ¡Lea AMBOS documentos cuidadosamente!
Guía para Idiotas para Resolver problemas en Perl y CGI http://www.perl.com/perl/faq/index.html
En este momento, no puede. Perl no soporta multi-hebras. Sin embargo, el soporte para multi-hebras se espera que forme parte de la distribución del núcleo de perl con la versión 5.005, lo que implica que DBI pueda soportar multi-hebrado muy poco tiempo después. Para ver algunos ejemplo de codigo OCI con instrucciones SELECT con multi-hebrado para Oracle, vea:
Asumiendo que ha creado usted un procedimiento almacenado dentro de la base de datos, por ejemplo una base de datos Oracle, puede utilizar $dbh->do para ejecutar inmediatamente el procedimiento. Por ejemplo,
$dbh->do( "BEGIN mi_procedimiento END" );
¡Recuerde realizar la comprobación de errores!
$sth = $dbh->prepare( "BEGIN foo(:1, :2, :3); END;" ); $sth->bind_param(1, $a); $sth->bind_param_inout(2, \$path, 2000); $sth->bind_param_inout(3, \$success, 2000); $sth->execute;
La creación y borrado son conceptos que están enteramente abstractos para ser adecuadamente soportados por DBI. Por ejemplo, Oracle no soporta el concepto de borrado de una base de datos por completo. Además, en Oracle, el servidor de base de datos es esencialmente la misma base de datos, mientras que en mSQL, el proceso servidor de base de datos funciona adecuadamente sin tener ninguna base de datos creada. El problema es demasiado dispar para atacarlo. Algunos drivers, sin embargo soportan la creación y el borrado a través de los métodos de funciones privadas. Debería usted chequear la documentación para los drivers que está usted utilizando para ver si soportan este mecanismo.
Los valores NULL están especificados en DBI como valores indefinidos. Se pueden insertar valores nulos en las bases de datos como NULL. Por ejemplo:
$rv = $dbh->do( "INSERT INTO table VALUES( NULL )" );
pero cuando se recupera el valor, los nulos se deberían comprobar como undef. Este es un estandar en todos los drivers.
Los método de funciones (func method) se define en DBI como un punto de entrada para funcionalidades específicas de la base de datos, por ejemplo, la capacidad de crear y borrar bases de datos. Invocar estos métodos específicos del driver es sencillo, por ejemplo, para invocar un método createDatabase que tiene un argumento, escribiríamos:
$rv = $dbh->func( 'argumento', 'createDatabase' );
Los desarrolladores de software deberían tener en cuenta que estos métodos de función no son portables entre bases de datos.
El interface de base de datos Perl5 es software LIBRE. VIENE SIN GARANTÍA DE NINGÚN TIPO. Sin embargo, algunas organizaciones están proporcionando bien soporte técnico, bien programas de formación en DBI.
PERL CLINIC : The Perl Clinic puede organizar contratos de soporte comercial para Perl, DBI, DBD::Oracle y Oraperl. El soporte se proporciona a través de la compañía en la que trabaja Tim Bunce, autor de DBI. Para más información sobre sus servicios, visite por favor: