[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка из строковых полей в хранимых процедурах
redreem
есть процедура. в ней кусок:

...

DECLARE cur_letter CHAR;
DECLARE pid INT;
DECLARE cur_id INT;

SET pid = 10;
SET cur_letter = 'a';
...


SELECT `id` INTO cur_id FROM `table_name` WHERE `parent_id` = pid AND `letter` = cur_letter;

...



сие не работает (видимо проблемы с синтаксисом - хранимку как отлаживать - понятия не имею).

если сделать так:

...

DECLARE cur_letter CHAR;
DECLARE pid INT;
DECLARE cur_id INT;

SET pid = 10;
SET cur_letter = 'a';
...


SELECT `id` INTO cur_id FROM `table_name` WHERE `parent_id` = pid;

...



то процедура срабатывает. значит дело в куске AND `letter` = cur_letter;

в чем может быть проблема? символьную переменную надо чтоли в селекте как-то еще оборачивать?





Спустя 8 минут, 4 секунды (3.06.2012 - 20:05) Dezigo написал(а):
DECLARE cur_letter CHAR;
Вы зыбили поставить
DECLARE @cur_letter CHAR;
@
SET @var := 1

SELECT @var2 := 2

Спустя 5 минут, 14 секунд (3.06.2012 - 20:10) redreem написал(а):
DECLARE @cur_letter CHAR;


выдает ошибку при объявлении процедуры:

Цитата
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@cur_letter CHAR;

Спустя 1 минута, 36 секунд (3.06.2012 - 20:12) redreem написал(а):
и кстати зачем? ведь например с pid, объявленной так же в локальной области видимости процедуры - проблемы нету!

Спустя 32 минуты, 9 секунд (3.06.2012 - 20:44) vital написал(а):
WHERE `parent_id` = :pid AND `letter` = :cur_letter;

а так?

Еще не плохо бы уазать в какой бд это происходит.
T-SQL? PL/SQL ?

Спустя 7 минут, 8 секунд (3.06.2012 - 20:51) Dezigo написал(а):
А ну, если mysql, то как ты написал должно все работать.
Не вижу ошибки.

Спустя 10 минут, 40 секунд (3.06.2012 - 21:01) redreem написал(а):
MySQL

c :cur_letter; выдает ошибку.

Цитата
А ну, если mysql, то как ты написал должно все работать.


синтаксических ошибок при объявлении процедуры нет, но и SELECT возвращает "ничего".

Спустя 10 минут, 59 секунд (3.06.2012 - 21:12) Игорь_Vasinsky написал(а):
так ты говоришь - что при использовании системеых переменных (@) - ошибка? это подобие констант со своей "глобальной областью видимостью"... странно

вот почитай

http://ruseller.com/lessons.php?rub=28&id=1189
http://www.internet-technologies.ru/articl...ticle_1318.html

Спустя 1 час, 43 минуты, 1 секунда (3.06.2012 - 22:55) redreem написал(а):
вопрос решен. незнай че было, но "вдруг" заработало, хотя по теме топика ниче не изменилось. возможно проблема была в том, что я в одной базе использю таблицы в разных кодировках (так надо) и для тестовой таблицы и вносил записи вручную. а вот когда занес туда данные этой же самой процедурой - то все заработало. видимо вручную не втой кодирове символ попадал вот и глючило. всем спасибо.

Спустя 10 часов, 57 минут, 56 секунд (4.06.2012 - 09:53) redreem написал(а):
другой вопрос по той же теме:

делаю так:

...

SELECT COUNT(*) INTO count_lid FROM `lexx_dict_ru` WHERE `parent_id` = pid AND `letter` = put_letter;

IF count_lid > 0 THEN

SELECT
`id` INTO letter_id FROM `lexx_dict_ru` WHERE `parent_id` = pid AND `letter` = put_letter;

...


работает.

а вот так:

...

SELECT COUNT(*), `id` INTO count_lid, letter_id FROM `lexx_dict_ru` WHERE `parent_id` = pid AND `letter` = put_letter;

IF count_lid > 0 THEN

...


неработает. в чем прикол?

или может вопрос поставить подругому:

как мне проверить: есть ли выборка или нет в запросе

SELECT `id` INTO letter_id FROM `lexx_dict_ru` WHERE `parent_id` = pid AND `letter` = put_letter;


в примере выше только для этого и прикручен COUNT(*).
COUNT(letter_id) - сработает?

хотя вопрос, почему 2 выборки сразцу в селекте не срабатывают - тоже волнует.

Среда: MySQL, хранимки.

UPD: COUNT(letter_id) - проверил - неработает.

Спустя 6 часов, 38 минут, 44 секунды (4.06.2012 - 16:32) redreem написал(а):
up. актуально.

Спустя 4 часа, 32 минуты, 39 секунд (4.06.2012 - 21:05) Игорь_Vasinsky написал(а):
разве в таком порядке используют COUNT() ? там же вроде тоже правило, как в функциях со значением аргумента по умолчанию.

т.е. попробуй так

SELECT `id`, COUNT(*) INTO count_lid, letter_id FROM `lexx_dict_ru` WHERE `parent_id` = pid AND `letter` = put_letter;

Спустя 22 минуты, 5 секунд (4.06.2012 - 21:27) redreem написал(а):
Игорь_Vasinsky

неработает sad.gif

Спустя 56 минут, 23 секунды (4.06.2012 - 22:23) Игорь_Vasinsky написал(а):
а что за еррор получаешь?

http://russianpenguin.ru/2011/09/23/mysql-...B1%D0%BE%D0%BA/

Спустя 3 минуты, 7 секунд (4.06.2012 - 22:26) redreem написал(а):
Игорь_Vasinsky

да я не получаю еррор. хранимка же исполняется. просто она ниче не возвращает, хотя должна (должна вернуть в любом случае, хотябы даже дефолтные значения, которые инициализируются ДО работы логики). поэтому и сужу что "неработает". раз не возвращает, значит тупо не доходит до выдачи - прерывается изза ошибки.

UPD: покурю завтра твою ссылку. седня ужо аут.

Спустя 3 минуты, 46 секунд (4.06.2012 - 22:30) Игорь_Vasinsky написал(а):
лан. просто я помню ты говорил что не умеешь отлаживать процедуры. wink.gif

Спустя 13 часов, 42 минуты, 29 секунд (5.06.2012 - 12:13) redreem написал(а):
Игорь_Vasinsky

ну да. с хранимками мало работал. можно сказать только осваиваю. в плане отладки - тупо черный ящик. может есть логи какие-нить гденить, в которые пишутся ошибки, не?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.