2015-07-18 2 views
0

Я хочу сделать простую процедуру для вставки в таблицу. Вот мой код:Ошибка простой процедуры MySQL

create procedure dodajKorisnika 
(
    IN p_ime varchar(15), 
    IN p_prezime varchar(15), 
    IN p_broj_telefona int, 
    IN p_datum_rodjenja date, 
    IN p_broj_vozacke int, 
    IN p_grad_id int 
) 
BEGIN 




    INSERT into korisnik(
    ime, 
    prezime, 
    broj_telefona, 
    datum_rodjenja, 
    broj_vozacke, 
    grad_id) 
    VALUES(
    p_ime, 
    p_prezime, 
    p_broj_telefona, 
    p_datum_rodjenja, 
    p_broj_vozacke, 
    p_grad_id 
    ); 

END 

http://prntscr.com/7u7eia Когда я иду maous над подчеркнутой части я получил уведомление о Синтаксическая ошибка: отсутствует «точка с запятой» Когда я пытаюсь запустить запрос я получил ошибку 1064.

+1

Последний END нуждается в:. Чтобы запустить его, добавьте ** DELIMITER # ** перед созданием процедуры и ** DELIMITER; ** после последнего END; –

+0

Thx dude, его работа, я сделал это, теперь плохо попробую tu запустить его –

+0

Да, первая хранимая процедура - это большое препятствие: процедуры SQL (функции, триггеры), как правило, являются бит-счетчиками, интуитивно понятными по сравнению со многими другими языками программирования. –

ответ

0

Ваша хранимая процедура должен выглядеть следующим образом:

drop procedure if exists dodajKorisnika; 
DELIMITER ;; 
create procedure dodajKorisnika 
(
    IN p_ime varchar(15), 
    IN p_prezime varchar(15), 
    IN p_broj_telefona int, 
    IN p_datum_rodjenja date, 
    IN p_broj_vozacke int, 
    IN p_grad_id int 
) 
BEGIN 

    INSERT into korisnik(
    ime, 
    prezime, 
    broj_telefona, 
    datum_rodjenja, 
    broj_vozacke, 
    grad_id) 
    VALUES(
    p_ime, 
    p_prezime, 
    p_broj_telefona, 
    p_datum_rodjenja, 
    p_broj_vozacke, 
    p_grad_id 
    ); 

END;; 
DELIMITER ; 

причина использования разделителем является:

To change the default MySQL script parser’s delimiter from semicolon (;) to double-semicolan sign (;;). The reason you do this is so that the semicolons after each statement in the body of the routine are not interpreted by the parser as meaning the end of the CREATE PROCEDURE statement. This is because the entire CREATE PROCEDURE block, from CREATE PROCEDURE to END is actually a single statement that must be executed by itself. Were it not for the delimiter change, the script would break, since there each statement inside BEGIN and END would execute individually. Note that you can use a variety of non-reserved characters to make your own custom delimiter.

И drop procedure должен отказаться от существующей процедуры, если она существует.

Надеюсь, это поможет.

Смежные вопросы