Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UPDATE AFTER SELECT в хранимой процедуре, не работает 
:(
    Опции темы
chiffa
Дата 7.3.2014, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Всем добрый день. Есть таблица: 
TABLE_1
name id
 sss  1
 ddd   2


Есть Хранимая процедура:

Код

DECLARE my_var VARCHAR(3);

IF (SELECT COUNT (*) FROM TABLE_1 WHERE NAME = 'qqq' ) = 0 THEN SET my_var = 'no' ELSE SET  my_var = 'YES'; END IF;

SELECT my_var as 'result';


UPDATE TABLE_1 SET NAME='qqq' WHERE ID = 1



Насколько я понимаю должно вывести "no", то есть не найти такое значение т.к. я его вставляю в базу после селекта, но почему то возвращает YES. 

Подскажите как правильно прелизовать данну процедуру? Заранее спасибо!
PM MAIL   Вверх
Akina
Дата 7.3.2014, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Возвращает? не верю. У Вас там миллион синтаксических ошибок. Но если их все исправить, то

Код

mysql> create table table_1(name text, id int);
Query OK, 0 rows affected (0.88 sec)

mysql> insert into table_1 (name,id)
    -> select 'sss',1
    -> union
    -> select 'ddd',2;
Query OK, 2 rows affected (0.34 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE PROCEDURE test()
    -> BEGIN
    ->   DECLARE my_var VARCHAR(3);
    ->   SELECT COUNT(*) INTO @var FROM TABLE_1 WHERE NAME = 'qqq';
    ->   IF @var = 0 THEN
    ->     SET my_var = 'no';
    ->   ELSE
    ->     SET  my_var = 'YES';
    ->   END IF;
    ->   SELECT my_var as 'result';
    ->   UPDATE TABLE_1 SET NAME='qqq' WHERE ID = 1;
    -> END;
    -> //
Query OK, 0 rows affected (0.27 sec)

mysql> delimiter ;
mysql> select * from table_1;
+------+------+
| name | id   |
+------+------+
| sss  |    1 |
| ddd  |    2 |
+------+------+
2 rows in set (0.02 sec)

mysql> call test;
+--------+
| result |
+--------+
| no     |
+--------+
1 row in set (0.05 sec)

Query OK, 1 row affected (0.09 sec)

mysql> select * from table_1;
+------+------+
| name | id   |
+------+------+
| qqq  |    1 |
| ddd  |    2 |
+------+------+
2 rows in set (0.00 sec)

mysql>





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chiffa
Дата 7.3.2014, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Бред просто... 99,9% что где то торможу... Переношу твою процедуру - все работает на ура. Переделываю под себя - глючит, как описывал.

Вот процедура: 

Код

CREATE DEFINER=`test`@`localhost` PROCEDURE `UserEdit_Test`(IN `tel_num_ins` VARCHAR(30), IN `login_ins` VARCHAR(30))
BEGIN
       DECLARE my_var VARCHAR(3);


       SELECT COUNT(*) INTO @var FROM users WHERE login = login_ins and tel_num = tel_num_ins;


       IF @var = 0 THEN
         SET my_var = 'no';
       ELSE
         SET  my_var = 'YES';
       END IF;


       SELECT my_var as 'result';
       UPDATE users SET tel_num=tel_num_ins WHERE id = 10;
     END



вроде ж все так, но не работает...

Это сообщение отредактировал(а) chiffa - 7.3.2014, 23:27
PM MAIL   Вверх
Akina
Дата 8.3.2014, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Что делают бэктики в описании параметров процедуры??? Что они вообще у тебя делают? За каким хреном втыкать их где надо и где не надо?
Почему нет алиасов таблиц у имён полей в запросах?



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chiffa
Дата 8.3.2014, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Цитата(Akina @  8.3.2014,  20:19 Найти цитируемый пост)
Что делают бэктики в описании параметров процедуры


я экспортировал процедуру через пхпмайадмин, оно его вставило автоматом. 


Вот это работает как надо и тоже с бэктика и без алиасов...
Код

CREATE DEFINER=`test`@`localhost` PROCEDURE `test`(IN `sd_ins` VARCHAR(30), IN `eee_ins` VARCHAR(30))
BEGIN
       DECLARE my_var VARCHAR(3);


       SELECT COUNT(*) INTO @var FROM table_1 WHERE NAME = sd_ins and q = eee_ins;


       IF @var = 0 THEN
         SET my_var = 'no';
       ELSE
         SET  my_var = 'YES';
       END IF;


       SELECT my_var as 'result';

       UPDATE table_1 SET NAME=sd_ins WHERE ID = 1;
     END




PM MAIL   Вверх
chiffa
Дата 11.3.2014, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Проблема решена путем переработки логики запроса. всем спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0818 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.