SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.03.2010 10:50:12

juno24
Участник
Зарегистрирован: 15.03.2010
Сообщений: 4

Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Вызов
total_list('00052','01'); // Это вызов отрабатывает
total_list('00052','06'); // Здесь выдает ошибку ( Warning: mysql_fetch_array() expects parameter 1 to be resource),
что обычно означает ошибку в SQL запросе .
На деле получатеся два вызова хранимой процедуры подряд

call money_get_contragents_with_saldo('00052','01')
call money_get_contragents_with_saldo('00052','06')


Код php функции

function total_list($manager_id,$ed)
{
global $link,$smarty ;
$sql="call money_get_contragents_with_saldo('".$manager_id."','".$ed."')";
print $sql. "<br>";
$r=mysql_query($sql,$link);
print "количество строк в запросе:" . mysql_num_rows($r) . "<br>";
$rows=array();
while ($f=mysql_fetch_array($r))
  {
$rows[]=$f;
$smarty->assign('income', $rows);
  }
$smarty->assign('manager', $manager_id);
$smarty->display('Money/total_list.tpl');
}


------------------------------
Вот код процедуры.

CREATE DEFINER=`office`@`localhost` PROCEDURE `money_get_contragents_with_saldo`(IN manager varchar(5), IN edition varchar(2))
BEGIN

CREATE temporary TABLE saldo_tmp 
(summa double(13,2) NOT NULL,
contragent_id varchar(6) NOT NULL ,
manager_id varchar(5) NOT NULL);

       IF edition = '01'  THEN
insert into  saldo_tmp  select * from 01_view_6201_debet ;
insert into  saldo_tmp  select * from 01_view_6201_kredit ;

select ur_name,sum(summa),contragent_id,manager_id from saldo_tmp 
join contragents on saldo_tmp.contragent_id = contragents.id
where manager_id =(manager) group by contragent_id  ;
        END IF;


       IF edition = '06'  THEN
insert into  saldo_tmp  select * from 06_view_6201_debet ;
insert into  saldo_tmp  select * from 06_view_6201_kredit ;

select ur_name,sum(summa),contragent_id,manager_id from saldo_tmp 
join contragents on saldo_tmp.contragent_id = contragents.id
where manager_id =(manager) group by contragent_id  ;
        END IF;

DROP TABLE saldo_tmp;
END

Неактивен

 

#2 15.03.2010 13:50:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

$r=mysql_query($sql,$link);
print "количество строк в запросе:" . mysql_num_rows($r) . "<br>";

Между этими двумя строчками вставьте print (mysql_error($link));

Неактивен

 

#3 15.03.2010 14:39:43

juno24
Участник
Зарегистрирован: 15.03.2010
Сообщений: 4

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Выдал:
Commands out of sync; you can't run this command now
     Сижу читаю , как с этим бороться .

Неактивен

 

#4 15.03.2010 14:50:26

byterus
ISV
MySQL Ready Partner
Зарегистрирован: 02.02.2010
Сообщений: 39

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Похоже вы не забираете все наборы данных которые возвращает процедура.

Неактивен

 

#5 15.03.2010 15:12:12

juno24
Участник
Зарегистрирован: 15.03.2010
Сообщений: 4

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Нашел описание , как освободить набор данных , но для Mysqli.
Но я ее не использую . Как быть пока не соображу .

Неактивен

 

#6 15.03.2010 15:17:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Правильно использовать mysqli, старый интерфейс вообще очень плохо работает
с хранимыми процедурами. Ну или нужно аккуратно следить, чтобы процедура не
возвращала больше одного результата.

Неактивен

 

#7 15.03.2010 15:45:11

juno24
Участник
Зарегистрирован: 15.03.2010
Сообщений: 4

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Вот мне и не понятно , вроде у меня  всего один select . Что еще за результат может вернуть процедура?

Неактивен

 

#8 15.03.2010 16:31:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Ну, я так сходу тоже не вижу несколько селектов. Тем не менее, если Вы выполните
эту процедуру в клиенте MySQL, Вы получите пять кодов ошибок (создание временной
таблицы, вставка х2, собственно выборка, и удаление таблицы). Подозреваю, что
нужно забрать каждую из чиселок, а не только первую.

Неактивен

 

#9 14.10.2010 15:33:32

Retrill
Участник
Зарегистрирован: 09.10.2010
Сообщений: 21

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Я, конечно, несовсем своевременно, но столкнулся с аналогичной проблемой.
Загвоздка состоит в том, что процедуры, возвращающие результатом таблицу, возвращают помимо нее и второй результат - булеву переменную относительно успешности/неуспешности запроса. Пока вы ее не "вытащите", дело дальше не пойдет.
В программе-клиенте (у меня php) нужно написать что-то вроде этого:


while(mysqli_next_result($dblink)){
     mysqli_store_result($dblink);
}
 

Здесь переменная $dblink - ссылка на ваше соединение.

Неактивен

 

#10 05.05.2011 00:58:48

simple
Активист
Зарегистрирован: 25.11.2010
Сообщений: 168

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Тоже столкнулся с этой проблемой,а куда именно вставлять этот код? Перед вызовом процедуры или после? я поставил в середину между 1 и 2 процедурой вроде бы работает, хотелось только уточнить правильно ли я сделал

Отредактированно simple (05.05.2011 01:01:00)

Неактивен

 

#11 05.05.2011 01:44:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Не могу вызвать хранимую процедуру два раза подряд с другими параметрами

Ааа! Март! 2010! sad

Если работает, значит, правильно.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson