Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ошибка при вызове процедуры

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ammiak
Отправлено: 12 Октября, 2011 - 13:14:52
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Здравствуйте, есть две таблицы:
products (`id_prod`, `prod_name`)
catalog (`id_cat`, `cat_name`)
есть процедура, которая по имени товарной позиции возвращает название и id каталога, к которому относится товар.
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE procedure catalog_by_prod (IN product TINYTEXT, OUT id_cat INT, OUT catalog TINYTEXT)
  3. SELECT`id_cat`, `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`) WHERE `prod_name`='product';
  4. //
  5.  

При вызове
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CALL catalog_by_prod ('Celeron D 320 2.4GHz', id_cat, catalog)//
  3. SELECT id_cat, catalog//
  4.  

выводится ошибка:
Цитата:

#1414 - OUT or INOUT argument 2 for routine shop.catalog_by_prod is not a variable or NEW pseudo-variable in BEFORE trigger

подскажите пжл, в чем здесь может быть дело?
 
 Top
caballero
Отправлено: 12 Октября, 2011 - 13:32:44
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




проверь откда берутся переменные id_cat, catalog
обяви их явно и проинициализируй


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Ammiak
Отправлено: 12 Октября, 2011 - 13:40:27
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE procedure catalog_by_prod (IN product TINYTEXT, OUT id_cat INT, OUT catalog TINYTEXT)
  3. BEGIN
  4. declare id_cat INT;
  5. declare catalog TINYTEXT;
  6. SELECT `id_cat`, `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`) WHERE `prod_name`='product';
  7. END//
  8.  

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CALL catalog_by_prod ('Celeron D 320 2.4GHz', id_cat, catalog)//
  3. SELECT id_cat, catalog//
  4.  

Выдаёт ту же ошибку

(Отредактировано автором: 12 Октября, 2011 - 13:43:40)

 
 Top
tuareg
Отправлено: 12 Октября, 2011 - 15:16:17
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Здравствуйте!
Во-первых,
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT `id_cat`, `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`) WHERE `prod_name`='product';
  3.  

Переменную catalog Вы сделали(заполнили), а где INTO id_cat????
Во-вторых, Вы уверены, что процедура может вернуть массив по сути что одна что вторая переменная это массивы я просто не уверен, что это возможно. В MySQL нет массивов
 
 Top
Ammiak
Отправлено: 12 Октября, 2011 - 19:56:05
Post Id


Частый гость


Покинул форум
Сообщений всего: 232
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Если написать так:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT `id_cat` INTO id_cat, `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`) WHERE `prod_name`='product';
  3.  

выдаёт ошибку:
Цитата:

#1327 - Undeclared variable: cat_name

как можно исправить?
 
 Top
tuareg
Отправлено: 12 Октября, 2011 - 21:35:04
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




А Вы зачем вообще используете эту процедуру. Я к тому, что может можно по-другому сделать...
Т.е Вы планируете получить данные, дальше что???
Это я к тому, что может курсор сделать, или еще что-нибудь придумать.
И вообще, попробйте запустить процедуру с одной переменной на выходе, например catalog
Она работает???
 
 Top
caballero
Отправлено: 12 Октября, 2011 - 22:12:47
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




переменные типа OUT и INOUT нужно инициализировать ПЕРЕД вызовом процедуры иначе процедура не знает куда данные писать


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
fdr21
Отправлено: 26 Апреля, 2013 - 10:34:24
Post Id



Гость


Покинул форум
Сообщений всего: 86
Дата рег-ции: Июнь 2012  


Помог: 5 раз(а)




Ammiak пишет:
Если написать так:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT `id_cat` INTO id_cat, `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`) WHERE `prod_name`='product';
  3.  

выдаёт ошибку:
Цитата:

#1327 - Undeclared variable: cat_name

как можно исправить?


Устарел топик Улыбка
Но может кому не будь пригодится!

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT `id_cat` INTO id_cat, `cat_name` INTO catalog FROM `products` JOIN `catalog` USING (`id_cat`) WHERE `prod_name`='product';
  3.  

Правильней кажется будет так
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT `id_cat`, `cat_name` INTO id_cat, catalog FROM `products` JOIN `catalog` USING (`id_cat`) WHERE `prod_name`='product';
  3.  

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT столбец1, столбец2 и т.д INTO столбец1, столбец2 и т.д FROM
  3.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB