Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание хранимой процедуры. В чём может быть проблема? / 3 сообщений из 3, страница 1 из 1
05.04.2015, 17:40:25
    #38927447
alexiuscrow
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание хранимой процедуры. В чём может быть проблема?
Есть простой запрос. Из этого запроса необходимо создать хранимую процедуру.
Запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
  id, name, category, ROUND((
    1000 * 6371 * ACOS (
      COS ( RADIANS(51.42689) )
      * COS( RADIANS( latitude ) )
      * COS( RADIANS( longitude ) - RADIANS(31.42689) )
      + SIN ( RADIANS(51.522256) )
      * SIN( RADIANS( latitude ) )
    )
  ), 3) AS distance, address, latitude, longitude, 
  (SELECT name FROM localities WHERE id = locality_id) AS locality_name, locality_id
FROM shops
HAVING distance < 150
ORDER BY distance;



Создание хранимой процедуры из вышеописанного запроса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
DROP PROCEDURE IF EXISTS `get_nearest_shops`;
DELIMITER //
CREATE PROCEDURE get_nearest_shops(
  IN p_lat DOUBLE, 
  IN p_lng DOUBLE, 
    IN p_radius DOUBLE,
    OUT p_id INT(10),
    OUT p_name VARCHAR(45),
    OUT p_category ENUM('undefined','auto','children_prod','food','game','book',
                        'electronics','beuty&health','fashin','footwear','clothing',
                        'sports','homewere','pet_prod','services','gift&flowers'),
    OUT p_distance DOUBLE, 
    OUT p_latitude DOUBLE,
    OUT p_longitude DOUBLE,
    OUT p_locality VARCHAR(45),
    OUT p_locality_id INT(10))
BEGIN 
  DECLARE sign_after_point INT(10) DEFAULT 3;
  SELECT
    id, name, category, ROUND((
    1000 * 6371 * ACOS (
      COS ( RADIANS(p_lat) )
      * COS( RADIANS( latitude ) )
      * COS( RADIANS( longitude ) - RADIANS(p_lng) )
      + SIN ( RADIANS(p_lat) )
      * SIN( RADIANS( latitude ) )
      )
    ), sign_after_point) AS distance, latitude, longitude, 
        (SELECT name FROM localities WHERE id = locality_id) AS locality, 
        locality_id
  INTO
    p_id, p_name, p_category, p_distance, p_latitude, p_longitude, 
        p_locality, p_locality_id
    FROM shops
  HAVING distance < p_radius
  ORDER BY distance;
END;//



В результате хранимая процедура создаётся без единой ошибки но в отличии от простого запроса не выводит информацию, при том что входящие данные одинаковы.
В чем может быть ошибка? Как лучше поступить?
Спасибо.
...
Рейтинг: 0 / 0
05.04.2015, 19:23:07
    #38927491
retvizan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание хранимой процедуры. В чём может быть проблема?
alexiuscrow,

Выполнитое эти два запроса:
Код: sql
1.
2.
select 1;
select 1 into @a;


Какой из них не выводит информацию? И почему вы решили, что в процедуре он будет вести себя иначе?
...
Рейтинг: 0 / 0
05.04.2015, 20:54:58
    #38927530
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание хранимой процедуры. В чём может быть проблема?
alexiuscrow
В результате хранимая процедура создаётся без единой ошибки но в отличии от простого запроса не выводит информацию, при том что входящие данные одинаковы.
В чем может быть ошибка? Как лучше поступить?
Спасибо.


Так ты её так написал, что она все поля запихивает в выходные парамертры (причём записей в запросе может быть много,
а возвращаешь ты только как бы одну запись, значения из неё).

убери из запроса фразу INTO -- запрос будет формировать набор данных, и ты сможешь его получить на клиентской стороне как нормальный набор данных (при этом все OUT-параметры тоже не нужны).
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание хранимой процедуры. В чём может быть проблема? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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