Хранимые процедуры MySQL, возвращающие Select - PullRequest
3 голосов
/ 10 января 2012

Это очень простой вопрос MySQL, но я не смог найти ответ. Предположим следующее тело хранимой процедуры:

DECLARE Existing INT DEFAULT 0;
SELECT SQL_CALC_FOUND_ROWS name FROM users WHERE id = pid LIMIT 1;
SELECT FOUND_ROWS() INTO Existing;
Select Existing;

когда я запускаю его, он всегда возвращает первые результаты SELECT. Однако я ожидаю, что он вернет последние (SELECT Existing) результаты. Это нормальное поведение? Если так, как я могу изменить это, потому что первый выбор только для проверки, и последний - то, что мне нужно.

(Реальная логика отличается от этой, я просто упростил ее здесь)

Ответы [ 4 ]

3 голосов
/ 10 января 2012

Вместо этого вы можете сделать что-то вроде этого:

SELECT COALESCE(id/id, 0) AS Existing
    FROM users 
    WHERE id = pid 
    LIMIT 1;

Если будет найдено id, вы вернете 1 (id / id = 1).Если id не найдено, вы вернете 0 (id / id IS NULL и COALESCE вернет 0).

1 голос
/ 10 января 2012

Проблема в клиенте MySQL, который вы используете для запуска хранимой процедуры. Хранимая процедура вернет набор результатов всех запросов, но клиент должен поддерживать его. Вы выполняете свои запросы в phpMyAdmin или другом подобном клиенте? Попробуйте вызвать хранимую процедуру, используя клиент по умолчанию - командную строку, и вы увидите, что она возвращает результаты всех запросов. Пожалуйста, прочитайте последний пункт на этой странице .

Теперь это было для некоторых указателей. Теперь перейдем к тому, как вы можете вернуть значения из процедуры. Это можно сделать с помощью параметра OUT, который используется для передачи значения из процедуры обратно вызывающей стороне. Пожалуйста, прочитайте больше на этой странице на веб-сайте MySQL - пример на этой странице объясняет это.

Надеюсь, это поможет!

0 голосов
/ 01 февраля 2014

только для отладки, если два столбца столбца возврата sql равны, вы можете использовать union:

select 1, '100' union select '3434', 2;

0 голосов
/ 10 января 2012

Вы можете создать переменные таблицы, заполнить их, а затем выбрать из них

CREATE PROCEDURE my_proc () BEGIN 

CREATE TEMPORARY TABLE TempTable (myid int, myfield varchar(100)); 
INSERT INTO TmpTable SELECT tblid, tblfield FROM Table1; 

SELECT * FROM TEMPORARY;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...