MySQL Stored Procedures, не работающий с ВЫБОРОМ (основной вопрос)

Я использую платформу (perfectforms), которые требуют, чтобы я использовал хранимые процедуры для большинства своих запросов, и никогда использовавший хранимые процедуры, я не могу выяснить то, что я делаю неправильно. Следующее утверждение выполняется без ошибки:

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.test_proc//
CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
DELIMITER ;

Но когда я пытаюсь назвать это использованием:

CALL test_proc();

Я получаю следующую ошибку:

#1312 - PROCEDURE test_db.test_proc can't return a result set in the given context

Я выполняю эти операторы из phpmyadmin 3.2.4, Версия 5.2.12 PHP и mysql серверная версия с 5.0.89 сообществами.

Когда я пишу хранимую процедуру, которая возвращает параметр, и затем выберите его, вещи хорошо работают (например).:

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.get_sum//
CREATE PROCEDURE test_db.get_sum(out total int)
BEGIN
SELECT SUM(field1) INTO total FROM test_db.test_table;
END //
DELIMITER ;

хорошо работает, и когда я называю его:

CALL get_sum(@t); SELECT @t;

Я получаю сумму без проблем.

В конечном счете то, что я должен сделать, обернули необычный оператор SELECT в хранимой процедуре, таким образом, я могу назвать его, и возвращать несколько строк нескольких полей. На данный момент я просто пытаюсь получить любую избранную работу.

Любая справка значительно ценится.

5
задан OMG Ponies 23 May 2011 в 05:55
поделиться

3 ответа

Разобрался. Это не ошибка PHP (хотя раньше было) - это ошибка некоторых версий phpmyadmin. Та же ошибка периодически появляется снова, а затем исправляется в различных подверсиях (см. Выше):

#1312 - PROCEDURE [name] can't return a result set in the given context

Такое поведение, по-видимому, ограничено операторами SELECT в хранимых процедурах внутри phpmyadmin .

Использование клиента, такого как MySQL Workbench, позволяет обойти проблему (или вы можете обновить phpmyadmin, но это неприятно, если вы работаете на общем сервере, как я).

В любом случае, спасибо всем за помощь.

9
ответ дан 13 December 2019 в 19:25
поделиться

Проверьте свою версию php, чтобы узнать, сообщается ли об этой ошибке (см. здесь ).

См. Это сообщение: Невозможно вернуть набор результатов в данном контексте

1
ответ дан 13 December 2019 в 19:25
поделиться

Когда я выполняю следующее:

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.test_proc//
CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
DELIMITER ;

За ним следует

CALL test_db.test_proc();

, я показываю мне набор результатов вроде:

+-----+
| foo |
+-----+
| foo |
+-----+

Я использую PHP 5.3.1, MySQL 5.1.41 с phpMyAdmin 3.2.4.

Возможно, вы просто неправильно написали имя своей процедуры?
Или может быть проблема с вашими установками PHP или MySQL? (Возможно, это ошибка. Вы пробовали обновиться до последних версий?)

0
ответ дан 13 December 2019 в 19:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: