Ошибка синтаксиса mariaDB (хранимая процедура с оператором if и параметрами) - PullRequest
0 голосов
/ 11 февраля 2019

Привет и добрый день .. Мне нужна помощь по моему запросу о хранимых процедурах с использованием shell или cmd. Это моя книга bookAuthor

+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| authorID    | int(11)     | NO   | PRI | NULL    | auto_increment |
| authorLname | varchar(50) | YES  |     | NULL    |                |
| authorFname | varchar(50) | YES  |     | NULL    |                |
| authorMname | varchar(50) | YES  |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+`

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

 MariaDB [library]> create procedure selectAll()
    -> select * from bookAuthor;
Query OK, 0 rows affected (0.60 sec)

Но если я использую оператор if и добавлю параметры, подобные запросу ниже

 MariaDB [library]> create procedure insertUpdateSelectDelete
    -> (
    -> id int(11),
    -> lname varchar(50),
    -> fname varchar(50),
    -> mname varchar(50),
    -> statementtype varchar(30)
    -> )
    -> if statementtype = 'Insert'
    -> insert into bookAuthor
    -> (
    -> authorLname,
    -> authorFname,
    -> authorMname
    -> )
    -> values
    -> (
    -> lname,
    -> fname,
    -> mname
    -> )
    -> if statementtype = 'Update'
    -> update bookAuthor set
    -> authorLname = lname,
    -> authorFname = fname,
    -> authorMname = mname
    -> where authorID = id
    -> if statementtype = 'Select'
    -> select * from bookAuthor
    -> if statementtype = 'Delete'
    -> delete from bookAuthor where authorID = id;

будет возвращена ошибка, подобная этой

 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'insert into bookAuthor
(
authorLname,
authorFname,
authorMname
)
values
(
lname,' at line 10

1 Ответ

0 голосов
/ 11 февраля 2019

У вас много проблем с вашим кодом.Во-первых, операторы IF требуют THEN после условия и должны заканчиваться END IF.Во-вторых, все операторы в процедуре должны заканчиваться ;.Попробуйте вместо этого:

create procedure insertUpdateSelectDelete(
    id int(11),
    lname varchar(50),
    fname varchar(50),
    mname varchar(50),
    statementtype varchar(30)
)
begin
    if statementtype = 'Insert' then
        insert into bookAuthor (authorLname,authorFname,authorMname)
        values (lname,fname,mname);
    elseif statementtype = 'Update' then
        update bookAuthor
        set authorLname = lname, authorFname = fname, authorMname = mname
        where authorID = id;
    elseif statementtype = 'Select' then
        select * from bookAuthor;
    elseif statementtype = 'Delete' then
        delete from bookAuthor where authorID = id;
    end if;
end

Обратите внимание, что если вы пишете процедуру как блок IF/ELSEIF, как у меня, вам строго не требуется оболочка BEGIN/END, так как в процедуре есть только один оператор.

Вот демоверсия на dbfiddle работающей процедуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...