Задавайте вопросы, мы ответим
Вы не зашли.
я совсем начинающий пользователь mysql. Никак не могу понять, что ему не нравится... ошибка синтаксеса
CREATE PROCEDURE INS_VED ( out sname char(50), out scategory char(50), out scafe char(50), out smark char(50)) begin
DECLARE ID_st int;
DECLARE ID_sb INT;
DECLARE ID_mr INT;
IF (NOT EXISTS (SELECT * FROM food WHERE name = sname AND category = scategory))
THEN
INSERT INTO food(name, category) VALUES (sname, scategory);
SELECT ID_food FROM food WHERE name=:sname and category=scategory INTO id_st;
IF (NOT EXISTS (SELECT * FROM cafe WHERE name = scafe))
THEN
INSERT INTO cafe(name) VALUES (scafe);
SELECT ID_cafe FROM cafe WHERE name=:scafe INTO id_sb;
IF (NOT EXISTS (SELECT * FROM marks WHERE name = smark))
THEN
INSERT INTO marks (name) VALUES (:smark);
SELECT ID_marks FROM marks WHERE name=smark INTO id_mr;
IF (NOT EXISTS (SELECT * FROM Wher WHERE ID_Food = id_st AND ID_cafe = id_sb AND ID_marks = id_mr))
THEN
INSERT INTO Wher (ID_food, ID_cafe, ID_marks) VALUES (id_st, id_sb, id_mr);
END;
Неактивен
Есть жесткое ощущение, что Вы копируете код, предназначенный для MSSQL
1. В MySQL параметры не передаются с двоеточием в начале.
2. Если запускаете этот код в клиенте MySQL, то нужно выставлять правильный разделитель
(delimiter ; и завершать команду этим разделителем.
Неактивен
так и есть я более менее знаю mssql, и вот пытаюсь разобраться с Mysql
delimiter //
CREATE PROCEDURE INS_VED ( in sname char(20), in scategory char(20), in scafe char(20), in smark char(20))
begin
DECLARE ID_st int;
DECLARE ID_sb INT;
DECLARE ID_mr INT;
IF (NOT EXISTS (SELECT * FROM food WHERE name = sname AND category = scategory))
THEN
INSERT INTO food(name, category) VALUES (sname, scategory);
SELECT ID_food FROM food WHERE name=sname and category=scategory INTO id_st;
IF (NOT EXISTS (SELECT * FROM cafe WHERE name = scafe))
THEN
INSERT INTO cafe(name) VALUES (scafe);
SELECT ID_cafe FROM cafe WHERE name=scafe INTO id_sb;
IF (NOT EXISTS (SELECT * FROM marks WHERE name = smark))
THEN
INSERT INTO marks (name) VALUES (smark);
SELECT ID_marks FROM marks WHERE name=smark INTO id_mr;
IF (NOT EXISTS (SELECT * FROM Wher WHERE ID_Food = id_st AND ID_cafe = id_sb AND ID_marks = id_mr))
THEN
INSERT INTO Wher (ID_food, ID_cafe, ID_marks) VALUES (id_st, id_sb, id_mr);
END; //
так же ошибка синтаксиса... Ругается на delimiter //
Отредактированно susumi (24.03.2009 22:32:11)
Неактивен
Уже лучше. Какой клиент? delimiter — команда стандартного консольного клиента.
Синтаксис IF у Вас не правильный — в MySQL они требуют явного закрывания (END IF):
http://dev.mysql.com/doc/refman/5.1/en/ … ement.html
В остальном, вроде, визуально правильно, должно работать.
Неактивен
Каждую условную конструкцию нужно завершать оператором END IF;
IF NOT EXISTS (SELECT * FROM food WHERE name = sname AND category = scategory) THEN
INSERT INTO food(name, category) VALUES (sname, scategory);
SELECT ID_food FROM food WHERE name=sname and category=scategory INTO id_st;
END IF;
IF NOT EXISTS (SELECT * FROM cafe WHERE name = scafe) THEN
INSERT INTO cafe(name) VALUES (scafe);
SELECT ID_cafe FROM cafe WHERE name=scafe INTO id_sb;
END IF;
...
Неактивен