Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод данных с помощью процедуры / 22 сообщений из 22, страница 1 из 1
04.09.2018, 19:59
    #39698069
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
Добрый день, подскажите как вывести данные с помощью процедуры. Вот эта выводит только одну запись.
В MySQL можно вывести все данные из курсора ?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
BEGIN  
    DECLARE done, cid_out INT;
    DECLARE title_out VARCHAR(500);
    DECLARE cur1 CURSOR for select A.cid, B.title from contract_account A join service B on A.sid=B.id where cid=369;  
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    OPEN cur1; 
   
    SET done = 0;   
  
    WHILE done = 0 DO  
    	FETCH cur1 INTO cid_out, title_out; 
        SELECT cid_out, title_out;
    END WHILE;     
    CLOSE cur1;
END;
...
Рейтинг: 0 / 0
04.09.2018, 20:07
    #39698079
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
outman,

процедура выводит не одну запись ,а множество по одной записи
чтоб их получить надо воспользоваться инструментами того языка, что запускают хранимку
или
сначала поместить данные в во временную таблицу в памяти и из неё извлечь данные селектом...
...
Рейтинг: 0 / 0
04.09.2018, 20:23
    #39698087
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
Процедура содержит ошибку - последний из отдаваемых процедурой набор записей будет пустым. Следует делать FETCH непосредственно перед WHILE и непосредственно перед END WHILE.
...
Рейтинг: 0 / 0
04.09.2018, 20:28
    #39698089
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
Спасибо за ответ. Сделал с временной таблицей, но у меня одна и та же запись повторяется.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
BEGIN  
    DECLARE yy, mm, done, cid_out INT;
    DECLARE title_out VARCHAR(500);
    DECLARE cur1 CURSOR for select A.yy, A.mm, A.cid, B.title from contract_account A join service B on A.sid=B.id where cid=369;  
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    OPEN cur1;
    SET done = 0;   
    CREATE TEMPORARY TABLE new_t (yy INT, mm INT, cid_out INT, title_out VARCHAR(500));
    WHILE done = 0 DO  
    	FETCH cur1 INTO yy, mm, cid_out, title_out; 
        insert into new_t values(yy, mm, cid_out, title_out);        
    END WHILE;     
    CLOSE cur1;
    SELECT yy, mm, cid_out, title_out from new_t;
END
...
Рейтинг: 0 / 0
04.09.2018, 20:31
    #39698090
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
Akina, спасибо, но я не понимаю как это все работает. У меня одна и та же запись 135 раз.
...
Рейтинг: 0 / 0
05.09.2018, 06:01
    #39698152
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
outman,

что возвращает этот запрос
Код: sql
1.
select A.yy, A.mm, A.cid, B.title from contract_account A join service B on A.sid=B.id where cid=369; 
...
Рейтинг: 0 / 0
05.09.2018, 10:26
    #39698238
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
135 записей, но они все разные.
...
Рейтинг: 0 / 0
05.09.2018, 10:59
    #39698264
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
outman135 записей, но они все разные.
outmanУ меня одна и та же запись 135 раз.
какая из 135 записей?
...
Рейтинг: 0 / 0
05.09.2018, 11:00
    #39698265
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
outman , чудеса рассказываете... создавайте модельный fiddle, будем вместе крутить...
...
Рейтинг: 0 / 0
05.09.2018, 11:02
    #39698268
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
outmanУ меня одна и та же запись 135 раз.Надо ли понимать, что процедура возвращает 135 записей, но если в последнем запросе процедуры добавить DISTINCT, то возвращается только 1 запись?
...
Рейтинг: 0 / 0
05.09.2018, 12:00
    #39698323
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
вадя, процедура отдает последнюю запись из запроса
Код: plsql
1.
SELECT A.yy, A.mm, A.cid, B.title FROM contract_account A JOIN service B ON A.sid=B.id WHERE cid=369

135 раз.
...
Рейтинг: 0 / 0
05.09.2018, 12:04
    #39698328
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
outmanвадя, процедура отдает последнюю запись из запроса
Код: plsql
1.
SELECT A.yy, A.mm, A.cid, B.title FROM contract_account A JOIN service B ON A.sid=B.id WHERE cid=369


135 раз.я не спрашивал что отдаёт процедура!!!
я спросил что отдаёт запрос!!!!!
...
Рейтинг: 0 / 0
05.09.2018, 12:05
    #39698331
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
AkinaoutmanУ меня одна и та же запись 135 раз.Надо ли понимать, что процедура возвращает 135 записей, но если в последнем запросе процедуры добавить DISTINCT, то возвращается только 1 запись?
Выдает одну последнюю запись. Ту самую, которая 135 раз возвращает процедура.
...
Рейтинг: 0 / 0
05.09.2018, 12:07
    #39698332
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
вадя, вот, что возвращает запрос скрин
...
Рейтинг: 0 / 0
05.09.2018, 12:10
    #39698342
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
Полный код процедуры, на всякий случай
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE DEFINER = 'root'@'localhost' PROCEDURE `avk_report_sverka`()
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN  
    DECLARE yy, mm, done, cid_out INT;
    DECLARE title_out VARCHAR(500);
    DECLARE cur1 CURSOR FOR SELECT A.yy, A.mm, A.cid, B.title FROM contract_account A JOIN service B ON A.sid=B.id WHERE cid=369;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    OPEN cur1;
    SET done = 0;   
    CREATE TEMPORARY TABLE new_t (yy INT, mm INT, cid_out INT, title_out VARCHAR(500));
	FETCH cur1 INTO yy, mm, cid_out, title_out;
    WHILE done = 0 DO   
        INSERT INTO new_t VALUES(yy, mm, cid_out, title_out);
        FETCH cur1 INTO yy, mm, cid_out, title_out;        
    END WHILE;     
    CLOSE cur1;
    SELECT DISTINCT yy, mm, cid_out, title_out FROM new_t;
END;
...
Рейтинг: 0 / 0
05.09.2018, 12:13
    #39698348
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
Вот результат процедуры без DISTINCT скрин
...
Рейтинг: 0 / 0
05.09.2018, 12:40
    #39698383
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
outman,

а зачем тут курсор?
...
Рейтинг: 0 / 0
05.09.2018, 12:45
    #39698390
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
outmanПолный код процедуры, на всякий случай
Код: sql
1.
2.
3.
...
    SELECT DISTINCT yy, mm, cid_out, title_out FROM new_t;
END;


Гений, итить!
Вот как ты думаешь, что будет выведено??? поля таблицы? хрен тебе! будут выведены переменные!
...
Рейтинг: 0 / 0
05.09.2018, 12:46
    #39698391
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
Код: sql
1.
SELECT DISTINCT new_t.yy, new_t.mm, new_t.cid_out, new_t.title_out FROM new_t;
...
Рейтинг: 0 / 0
05.09.2018, 12:48
    #39698393
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
вадя, мне надо потом обрабатывать полученные данные и выводить результат. Пытаюсь сделать скелет, а потом уже накручивать. В FireBird есть suspend, который выводит данные, а тут как-то не понятно мне. Вот и пишу.
...
Рейтинг: 0 / 0
05.09.2018, 12:49
    #39698397
outman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
Akina, блин, точно. Читал же, что переменные имеют приоритет. Спасибо большое.
...
Рейтинг: 0 / 0
05.09.2018, 12:50
    #39698398
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод данных с помощью процедуры
outman , ты лучше привыкни КАЖДОМУ полю указывать алиас таблицы. даже в абсолютно очевидных ситуациях. Больше пользы будет.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод данных с помощью процедуры / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]