SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 17.02.2011 12:44:19

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

помогите! не могу понять сто не правильно в функции

создала функцию, но она не проходит, не могу понять почему(((
причем отдельно запрос срабатывает!!

DELIMITER $$

DROP FUNCTION IF EXISTS `zadanie_2`.`function1` $$
CREATE FUNCTION `zadanie_2`.`function1` ()
RETURNS INT
BEGIN
SELECT count(*) from orders, users where name='r' and orders.id_user=users.id_user
END $$
      DELIMITER ;


#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 'SELECT count(*) from orders, users where name='r' and orders.id_user=users.id_user' at line 4

Неактивен

 

#2 17.02.2011 13:32:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите! не могу понять сто не правильно в функции

1. перед END нужна точка с запятой
2. функция должна возвращать число, но не должна генерировать набор результатов

RETURN (SELECT count(*) from orders, users where name='r' and orders.id_user=users.id_user);

Неактивен

 

#3 17.02.2011 13:58:48

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

большое спасибо, помогло)


может быть вы мне и с процедурой подскажите???

DELIMITER $$

DROP PROCEDURE IF EXISTS `zadanie_2`.`procedure2` $$
CREATE PROCEDURE procedure2 (in oldFio tinytext)
BEGIN
   DECLARE  idOld int
   SELECT id_user into idOld FROM users WHERE surname = oldFio;
   DELETE  FROM orders WHERE id_user = idOld;
   UPDATE orders;
END $$

DELIMITER ;

#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 'SELECT id_user into idOld FROM users WHERE surname = oldFio; DELETE  FROM or' at line 4

Неактивен

 

#4 17.02.2011 14:04:22

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите! не могу понять сто не правильно в функции

Точка с запятой после строчки DECLARE.

Неактивен

 

#5 17.02.2011 14:09:36

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

поставила но опять что-то неправильно

#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 '; END' at line 6

Неактивен

 

#6 17.02.2011 14:12:51

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

ура у меня получилась(просто убрала update)большое спасибо!!!

Неактивен

 

#7 17.02.2011 15:11:05

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

подскажите, как вообще создавать триггеры????(это как процедуры   script   -  create)

Неактивен

 

#8 17.02.2011 15:12:47

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите! не могу понять сто не правильно в функции

Неактивен

 

#9 17.02.2011 15:18:23

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

это все понятно
так где писать?? в командной строке?

Неактивен

 

#10 17.02.2011 15:34:19

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите! не могу понять сто не правильно в функции

Там же, где создаете процедуру. DELIMITER $$ тоже пригодится

Неактивен

 

#11 17.02.2011 15:37:06

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

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


CREATE TRIGGER bigLetter BEFORE  INSERT ON users
FOR each row
BEGIN
SET new.surname = concat(upper(left(new.surname,1));
substring(new.surname,1));
SET new.patronymic = concat(upper(left(new.patronymic,1)),
substring(new.patronymic,1));
SET new.name = concat(upper(left(new.name,1)),
substring(new.name,1));
END;


но пишет ошибки
#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 '' at line 4
#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 'substring(new.surname,1))' at line 1
#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 'substring(new.surname,1))' at line 1


и  там еще 3 шт

Неактивен

 

#12 17.02.2011 15:39:16

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

добавила DELIMITER $$

#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 'substring(new.surname,1));
SET new.patronymic = concat(upper(left(new.patron' at line 4

Неактивен

 

#13 17.02.2011 15:41:40

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите! не могу понять сто не правильно в функции

Что у вас делает строчка
substring(new.surname,1));
Это ведь не запрос и не часть выражения. Таких строчек две.

Неактивен

 

#14 17.02.2011 15:54:33

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

так что получается все строчки с substring  не нужны?

Неактивен

 

#15 17.02.2011 17:18:48

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

DELIMITER $$
CREATE TRIGGER bigLetter BEFORE  INSERT ON users
FOR each row
BEGIN
SET new.surname = concat(upper(left(new.surname,1)));
SET new.patronymic = concat(upper(left(new.patronymic,1)));
SET new.name = concat(upper(left(new.name,1)));
END;


может быть так правильно???подскажите пожалуйста, ошибок нет

а как проверить работает триггер или нет(что то типа call есть для триггера???)

Неактивен

 

#16 17.02.2011 17:32:39

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите! не могу понять сто не правильно в функции

Мне кажется форум не идет вам в помощь, ответы на форуме избавляют от необходимости думать и анализировать. Или вы хотите что-то быстрее закончить и избавиться навсегда от этого.

Попробуйте вставить запись в таблицу, триггер выполнится и увидите что записалось в таблицу. Например, substring(new.surname,1)) у вас была не лишняя, но она должна быть вторым аргументом CONCAT, а не отдельной строкой.

Неактивен

 

#17 17.02.2011 18:07:08

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

да я очень хочу побыстрее от этого задания избавиться!!!)
и что вы имеете ввиду под"вставить запись в таблицу"???
напишите как правильно, если не сложно!)

Неактивен

 

#18 17.02.2011 18:08:56

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

и кстати до этого  substring(new.surname,1)) был как раз вторым аргументом он писался в общей скобке

Неактивен

 

#19 17.02.2011 18:25:59

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите! не могу понять сто не правильно в функции

Верно, в общей скобке, но там стояла точка с запятой, а должна быть запятая.

INSERT INTO users (surname, name, patronymic) VALUES ('petrov', 'ivan', 'sergeevich');


Потом посмотрите:
SELECT * FROM users;

Неактивен

 

#20 17.02.2011 18:37:11

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

извиняюсь)) скопировала, а не глянула что!
все сделала, в табл вставляет, но почему-то только первую буква сначала большую потом маленькую((
получилось   
Pp Ii Ss

Неактивен

 

#21 17.02.2011 18:40:34

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

DELIMITER $$
CREATE TRIGGER big BEFORE  INSERT ON users
FOR each row
BEGIN
SET new.surname = concat(upper(left(new.surname,1)), substring(new.surname,1));
SET new.patronymic = concat(upper(left(new.patronymic,1)), substring(new.patronymic,1));
SET new.name = concat(upper(left(new.name,1)), substring(new.name,1));
END;


сейчас триггер в таком виде

Неактивен

 

#22 17.02.2011 18:50:54

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите! не могу понять сто не правильно в функции

Замените единичку на двоечку в последней функции (так в каждой строке):

SET new.surname = concat(upper(left(new.surname,1)), substring(new.surname,2));
 

Неактивен

 

#23 17.02.2011 18:57:15

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

не помогло(

Неактивен

 

#24 17.02.2011 19:00:47

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: помогите! не могу понять сто не правильно в функции

И какой сейчас ответ получается после вставки?

Неактивен

 

#25 17.02.2011 19:12:04

maseeva
Участник
Зарегистрирован: 17.02.2011
Сообщений: 22

Re: помогите! не могу понять сто не правильно в функции

такой же
Pp Ii Ss

Неактивен

 

Board footer

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