SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.12.2009 21:56:34

Spyer
Участник
Зарегистрирован: 12.12.2009
Сообщений: 3

Помогите разобратся с процедурами

Здраствуйте!
Для собственой разрпаботке начал разбиратся с хранимыми процедурами, для того чтобы действия выпонялись не в среде разработки (Delphi), а на самом сервере, и при первом же примере у меня ни чего не получается, вот пример того что я создал:

DELIMITER $$

DROP PROCEDURE IF EXISTS `new_proc` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `new_proc`(IN pICC VARCHAR(20), IN pNumTel VARCHAR(11), OUT pID_Tovar INT(10))
BEGIN
  SET @pID_Tovar = 0;
  SELECT `id_Tovar` INTO @pID_Tovar FROM tovar WHERE `ICC` LIKE pICC AND `NumTel` LIKE pNumTel

END $$

DELIMITER ;


а вот ошибка которая выходит:

Script line: 4    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 'END' at line 6

Подскажите в чем дело, либо подскажите литературу которую можно пичитать(желательно только на русском).
Заранее спасибо.

Неактивен

 

#2 13.12.2009 00:35:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите разобратся с процедурами

SELECT `id_Tovar` INTO @pID_Tovar FROM tovar WHERE `ICC` LIKE pICC AND `NumTel` LIKE pNumTel;

Забыли в конце строки поставить ;


На русском не знаю что посоветовать, разве что на форуме спрашивать.
Вот кстати хорошая тема, думаю вам будет интересно ознакомиться http://sqlinfo.ru/forum/viewtopic.php?id=363

Неактивен

 

#3 13.12.2009 12:14:37

Spyer
Участник
Зарегистрирован: 12.12.2009
Сообщений: 3

Re: Помогите разобратся с процедурами

Спасибо получилось


Но у меня возник вопрос как в процедурах использовать условия, я думаю что должно примерно так

DELIMITER $$

DROP PROCEDURE IF EXISTS `Insert_Prihod` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Insert_Prihod`(IN pICC CHAR(20), IN pNumTel CHAR(11), IN pTypeTovar INT, IN pDoc_id INT)
BEGIN
  SET @pID_Tovar = 0;
  SELECT `id_Tovar` INTO @pID_tovar FROM tovar WHERE `ICC` = pICC AND `NumTel` = pNumTel AND `TypeTovar_id` = pTypeTovar;
  IF @pID_Tovar = 0
    INSERT INTO Tovar (`ICC`, `NumTel`, `TypeTovar_id`) VALUES (pICC, pNumTel, pTypeTovar);
    SET @pID_Tovar = 0;
    SELECT id_Tovar INTO @pID_tovar FROM tovar WHERE ICC LIKE pICC AND NumTel LIKE pNumTel AND TypeTovar_id = pTypeTovar;
  END;

  INSERT INTO Docpb (Doc_id, Tovar_id, Kol) VALUES (pDoc_id, @pID_Tovar, 1);

END $$

DELIMITER ;

но выводит ошибки всеровно

Отредактированно Spyer (13.12.2009 12:24:49)

Неактивен

 

#4 13.12.2009 15:12:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите разобратся с процедурами

http://sqlinfo.ru/forum/viewtopic.php?pid=232#p232

Посмотрите http://sqlinfo.ru/forum/viewtopic.php?pid=3813#p3813
там процедура с комментариями.

И ещё вторая часть статьи http://webew.ru/articles/2080.webew

Неактивен

 

#5 15.12.2009 12:53:49

Spyer
Участник
Зарегистрирован: 12.12.2009
Сообщений: 3

Re: Помогите разобратся с процедурами

Спасибо.

С процедурами с условия разобрался, вот только у меня мысль пошла дальше, после того как я добавил процедуры в которой проверяется и добовляется с трока если такой нет, производительность программы не увеличилась и осталось на том уровне на котором и была.

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson