Модератор: Модераторы разделов
Виталмий
Сообщения: 468
Статус: Любитель
ОС: Gentoo Linux
Сообщение
Виталмий » 22.01.2007 16:59
создаю процедуру:
Код: Выделить всё
CREATE PROCEDURE `new_proc`()
BEGIN
SET @sql = "select RAND()";
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
выполняю:
Код: Выделить всё
mysql> call new_proc();
+------------------+
| RAND() |
+------------------+
| 0.86559206700473 |
+------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
но если её вызывать в перле:
Код: Выделить всё
use DBI;
$dbh = DBI->connect("DBI:mysql:test:localhost","root", "") or die;
$query=$dbh->prepare("CALL new_proc()");
$query->execute;
то говорит:
PROCEDURE test.new_proc can't return a result set in the given context
linux-2.6.17-gentoo-r5 x86 on AMD Athlon XP 2000+
OpenSuse 11.0 x86_64 on Sony VNG-FZ31ER
Omnifarious
Сообщения: 119
ОС: Gentoo x86_64
Сообщение
Omnifarious » 23.01.2007 00:05
Большинство api, в то числе и в perl, не умеют получать значение, возвращаемое процедурой.
Если бы процедура ничего не возвращала, то, скорее всего, выполнялась бы нормально.
There is more than one way to do it
Виталмий
Сообщения: 468
Статус: Любитель
ОС: Gentoo Linux
Сообщение
Виталмий » 23.01.2007 08:30
вопрос решил.
установил модуль DBD-mysql версии 4.001 и всё заработало на ура!!!
до этого было DBD-mysql версии 3.0002
Спасибо за внимание!
linux-2.6.17-gentoo-r5 x86 on AMD Athlon XP 2000+
OpenSuse 11.0 x86_64 on Sony VNG-FZ31ER