Как мне вызвать хранимые процедуры MySQL из Perl? Функциональность хранимых процедур довольно нова для MySQL, а модули MySQL для Perl, похоже, пока не догнаны.Как я могу вызвать хранимые процедуры MySQL из Perl?
ответ
Прежде всего, вы, вероятно, должны подключаться через библиотеку DBI, а затем использовать переменные связывания. Например. что-то вроде:
#!/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();
Разума вы я не проверял это, вы будете иметь для поиска точного синтаксиса на CPAN.
Есть пример в section on Multiple result sets in the DBD::mysql docs.
MySQL хранимые процедуры, которые создают наборы данных, вам нужно использовать Perl DBD :: mysql 4.001 или новее. (http://www.perlmonks.org/?node_id=609098)
Ниже тестовая программа, которая будет работать в новой версии:
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)'
Но если у вас слишком старая версия DBD :: MySQL, вы получите результаты, как это:
DBD::mysql::st execute failed: PROCEDURE bonk.Foo can't return a result set in the given context at -e line 1.
Вы можете установить новейший DBD с помощью 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";
Мне потребовалось некоторое время, чтобы понять это, но я смог получить то, что мне было нужно, с вышеуказанным. если вам нужно получить несколько возвратных «строк», я предполагаю, что вы просто ...
while(my $response = $sth->fetchrow_hashref()) {
print Dumper $response . "\n";
}
Надеюсь, это поможет.
Привет, аналогично выше, но с использованием SQL exec. Я не мог заставить команду CALL работать. Вам нужно будет заполнить все, что находится в квадратных скобках, и удалить квадратные скобки.
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 Хранимые процедуры из Lightswitch?
- 2. Как я могу вызвать зашифрованные хранимые процедуры MSSQL с Java?
- 3. mysql server: хранимые процедуры - когда я создаю хранимые процедуры?
- 4. MySQL Хранимые процедуры
- 5. MySQL хранимые процедуры
- 6. Как создать хранимые процедуры MySQL из PHP?
- 7. MySQL хранимые процедуры
- 8. Perl Dbi и хранимые процедуры
- 9. MySQL Хранимые процедуры
- 10. Mysql Хранимые процедуры
- 11. MySQL хранимые процедуры Логин
- 12. Mysql Хранимые процедуры Динамические запросы
- 13. MySQL - хранимые процедуры предельного вопрос
- 14. MySQL Хранимые переменные процедуры из операторов SELECT
- 15. MySQL Хранимые процедуры и PHPMyAdmin
- 16. Mysql хранимые процедуры множественные выборки
- 17. Насколько надежны хранимые процедуры mySQL?
- 18. MySQL хранимые процедуры выполнения Ошибка
- 19. C# лучший способ вызвать хранимые процедуры MySQL, функции
- 20. MySQL где размещать хранимые процедуры?
- 21. Хранимые процедуры и идентификаторы MySQL
- 22. MySQL хранимые процедуры основная вставка
- 23. MySQL хранимые процедуры в SVN
- 24. Время обновления MySQL хранимые процедуры
- 25. Entity Framework - MySQL хранимые процедуры
- 26. Хранимые процедуры Spring и MySQL
- 27. Профиль Хранимые процедуры в MySQL
- 28. MYSQL хранимые процедуры ВСТАВИТЬ Сбой
- 29. Хранимые процедуры, MySQL и PHP
- 30. MySQL хранимые процедуры Невозможно создать
Вы забыли точку с запятой после eval {}. Это обычная ошибка. – 2008-09-15 16:18:22