powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание хранимой процедуры. В чём может быть проблема?
3 сообщений из 3, страница 1 из 1
Создание хранимой процедуры. В чём может быть проблема?
    #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
Создание хранимой процедуры. В чём может быть проблема?
    #38927491
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexiuscrow,

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


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


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

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


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