¿Cómo llamo a MySQL los procedimientos almacenados desde Perl? La funcionalidad del procedimiento almacenado es bastante nueva en MySQL y los módulos MySQL para Perl no parecen haberse puesto al día aún.¿Cómo llamo a los procedimientos almacenados de MySQL desde Perl?
Respuesta
En primer lugar, probablemente debe conectarse a través de la biblioteca DBI y luego debe utilizar las variables de vinculación. P.ej. algo así como:
#!/usr/bin/perl
#
use strict;
use DBI qw(:sql_types);
my $dbh = DBI->connect(
$ConnStr,
$User,
$Password,
{RaiseError => 1, AutoCommit => 0}
) || die "Database connection not made: $DBI::errstr";
my $sql = qq {CALL someProcedure(1);} }
my $sth = $dbh->prepare($sql);
eval {
$sth->bind_param(1, $argument, SQL_VARCHAR);
};
if ([email protected]) {
warn "Database error: $DBI::errstr\n";
$dbh->rollback(); #just die if rollback is failing
}
$dbh->commit();
Recuerda que no he probado esto, tendrás que buscar la sintaxis exacta en CPAN.
Hay un ejemplo en el section on Multiple result sets in the DBD::mysql docs.
Los procedimientos almacenados de MySQL que producen conjuntos de datos necesitan que utilice Perl DBD :: mysql 4.001 o posterior. (http://www.perlmonks.org/?node_id=609098)
A continuación se muestra un programa de prueba que funcionará en la versión más reciente:
mysql> delimiter //
mysql> create procedure Foo(x int)
-> begin
-> select x*2;
-> end
-> //
perl -e 'use DBI; DBI->connect("dbi:mysql:database=bonk", "root", "")->prepare("call Foo(?)")->execute(21)'
Pero si usted tiene una versión demasiado vieja de DBD :: mysql, obtener resultados como este:
DBD::mysql::st execute failed: PROCEDURE bonk.Foo can't return a result set in the given context at -e line 1.
Puede instalar el DBD más reciente mediante CPAN.
#!/usr/bin/perl
# Stored Proc - Multiple Values In, Multiple Out
use strict;
use Data::Dumper;
use DBI;
my $dbh = DBI->connect('DBI:mysql:RTPC;host=db.server.com',
'user','password',{ RaiseError => 1 }) || die "$!\n";
my $sth = $dbh->prepare('CALL storedProcedure(?,?,?,?,@a,@b);');
$sth->bind_param(1, 2);
$sth->bind_param(2, 1003);
$sth->bind_param(3, 5000);
$sth->bind_param(4, 100);
$sth->execute();
my $response = $sth->fetchrow_hashref();
print Dumper $response . "\n";
Me tomó un tiempo para averiguarlo, pero yo era capaz de conseguir lo que necesitaba con lo anterior. si usted necesita para obtener múltiples "líneas" de retorno Te estoy adivinando sólo ...
while(my $response = $sth->fetchrow_hashref()) {
print Dumper $response . "\n";
}
espero que ayude.
Hola, similar a la anterior, pero utilizando el SQL Exec. No pude hacer que el comando CALL funcionara. Tendrá que completar todo lo que esté entre corchetes y eliminar los corchetes.
use DBI; #START: SET UP DATABASE AND CONNECT my $host = '*[server]*\\*[database]*'; my $database = '*[table]*'; my $user = '*[user]*'; my $auth = '*[password]*'; my $dsn = "dbi:ODBC:Driver={SQL Server};Server=$host;Database=$database"; my $dbh = DBI->connect($dsn, $user, $auth, { RaiseError => 1 }); #END : SET UP DATABASE AND CONNECT $sql = "exec *[stored procedure name]* *[param1]*,*[param2]*,*[param3]*;"; $sth = $dbh->prepare($sql); $sth->execute or die "SQL Error: $DBI::errstr\n";
- 1. MySQL: ¿Cómo modificar los procedimientos almacenados atómicamente?
- 2. MySQL: Vistas vs Procedimientos almacenados
- 3. ¿Cómo insertar/crear procedimientos almacenados en mySQL desde PHP?
- 4. ¿En qué ubicación están almacenados los procedimientos recopilados de Mysql?
- 5. ¿Cómo se depuran los procedimientos almacenados de MySQL?
- 6. Eliminar todos los procedimientos almacenados en MySQL o usar procedimientos almacenados temporales
- 7. ¿Cómo y cuándo mysql compila los procedimientos almacenados?
- 8. Procedimientos almacenados de MySql: ¿cómo seleccionar desde la tabla de procedimientos?
- 9. Permisos de procedimientos almacenados de MySQL
- 10. [MySQL]: Procedimientos almacenados y sentencias de selección
- 11. ¿Qué versión de MYSQL admite los procedimientos almacenados?
- 12. MySQL: instrucciones IF/THEN en procedimientos almacenados
- 13. MYSQL Procedimientos almacenados Si enunciado Problema
- 14. ¿Cómo encontrar los procedimientos almacenados por nombre?
- 15. Ejecución de procedimientos almacenados desde un DbContext
- 16. Ejecutar dispara procedimientos almacenados en SqlFiddle. Mysql
- 17. usando EXPLAIN para llamadas a procedimientos almacenados MYSQL
- 18. Versiones de procedimientos almacenados
- 19. ¿Cómo puedo encontrar llamadas a procedimientos almacenados?
- 20. ¿El SQL formado dinámicamente en los procedimientos almacenados niega el propósito mismo de los procedimientos almacenados?
- 21. Procedimientos almacenados a archivos .sql
- 22. PHP + MySql + Procedimientos almacenados, ¿cómo obtengo acceso a un valor de "salida"?
- 23. Guía para principiantes de procedimientos almacenados con MySQL?
- 24. procedimientos almacenados con sqlAlchemy
- 25. Lista de procedimientos almacenados/funciones Línea de comandos de Mysql
- 26. Procedimientos almacenados y funciones
- 27. Cómo usar los procedimientos almacenados con Symfony y Doctrine
- 28. Consultas de LINQ frente a Procedimientos almacenados
- 29. Cómo ejecutar procedimientos almacenados con Doctrine2 y MySQL
- 30. ¿Escribir parámetros opcionales dentro de procedimientos almacenados en MySQL?
Olvidó el punto y coma después de eval {}. Es un error común. –